0


SQLAlchemy批量更新

在 SQLAlchemy 1.4 版本中,批量更新仍然是一个常见的需求。虽然 SQLAlchemy 1.4 引入了一些新功能和改进,但基本的批量更新策略与之前的版本相似。以下是一些在 SQLAlchemy 1.4 中执行批量更新的常见方法:

1. 使用

  1. update()

语句

你可以使用

  1. update()

语句结合

  1. execute()

方法来执行批量更新。

  1. from sqlalchemy import update
  2. from sqlalchemy.orm import Session
  3. # 假设你有一个名为 User 的模型类,以及一个名为 session 的会话对象
  4. session = Session(engine)# 构建更新语句
  5. stmt =(
  6. update(User).where(User.name =='old_name').values(name='new_name'))# 执行更新
  7. session.execute(stmt)
  8. session.commit()

2. 使用原生 SQL 语句

你也可以直接使用原生 SQL 语句进行批量更新。

  1. from sqlalchemy import text
  2. # 构建原生 SQL 更新语句
  3. update_stmt = text("UPDATE users SET name = :new_name WHERE name = :old_name")# 执行更新
  4. session.execute(update_stmt,{'new_name':'new_name','old_name':'old_name'})
  5. session.commit()

3. 使用

  1. bulk_update_mappings()

如果你需要基于对象或字典的映射进行批量更新,可以使用

  1. bulk_update_mappings()

方法。

  1. from sqlalchemy.orm import bulk_update_mappings
  2. # 假设你有一个包含要更新的 User 对象的列表
  3. users_to_update =[{'id': user.id,'name':'new_name'}for user in session.query(User).filter(User.name =='old_name').all()]# 执行批量更新
  4. bulk_update_mappings(session, User, users_to_update)
  5. session.commit()

请注意,

  1. bulk_update_mappings()

方法不会触发 ORM 的事件,也不会加载任何对象到会话中。它直接执行 SQL 语句来更新数据库中的记录。

注意事项:

  • 在执行批量更新之前,请确保你的更新条件是正确的,以避免意外修改或删除数据。
  • 在使用原生 SQL 或构建复杂的更新逻辑时,请格外小心,以确保 SQL 注入等安全问题得到妥善处理。
  • 在进行批量更新之前,最好先在一个安全的测试环境中验证你的代码和逻辑。
  • 根据你的数据库和表的大小,批量更新可能会对性能产生影响。在生产环境中使用之前,建议进行性能测试。
  • 如果是更低的版本,可能只会支持前两种方式

本文转载自: https://blog.csdn.net/youhebuke225/article/details/137875221
版权归原作者 youhebuke225 所有, 如有侵权,请联系我们删除。

“SQLAlchemy批量更新”的评论:

还没有评论