0


SQLAlchemy批量更新

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

1. 使用

update()

语句

你可以使用

update()

语句结合

execute()

方法来执行批量更新。

from sqlalchemy import update
from sqlalchemy.orm import Session

# 假设你有一个名为 User 的模型类,以及一个名为 session 的会话对象
session = Session(engine)# 构建更新语句
stmt =(
    update(User).where(User.name =='old_name').values(name='new_name'))# 执行更新
session.execute(stmt)
session.commit()

2. 使用原生 SQL 语句

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

from sqlalchemy import text

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

3. 使用

bulk_update_mappings()

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

bulk_update_mappings()

方法。

from sqlalchemy.orm import bulk_update_mappings

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

请注意,

bulk_update_mappings()

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

注意事项:

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

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

“SQLAlchemy批量更新”的评论:

还没有评论