问题:
SQLAlchemy 能否执行批量插入,类似于单个 SQL 语句(INSERT INTO foo (bar) VALUES (1), (2), (3)),而不是为每个对象执行单独的插入?
答案:
SQLAlchemy 1.0.0 版本引入了批量操作,包括批量插入和更新。
批量插入:
在 1.0.0 版本及更高版本中,SQLAlchemy 支持使用以下方式进行批量插入: bulk_save_objects() 方法:
s = Session() objects = [ User(name="u1"), User(name="u2"), User(name="u3") ] s.bulk_save_objects(objects) s.commit()
此代码将执行单个批量插入操作来添加所有三个 User 对象。
提高效率:
与为每个对象执行单独插入相比,使用批量插入可显着提高性能。
过时的数据和事务:
要保持数据一致性,请使用 autocommit=False 的会话。当您使用 session.commit() 手动提交事务时,SQLAlchemy 会刷新修改的对象并在后续查询期间获取更新的记录。然而,来自外部源的数据库修改仍然可能导致陈旧数据问题。为了缓解这种情况,请考虑使用数据库锁来强制事务一致性。
以上是SQLAlchemy 如何实现优化的批量插入(如单个 SQL 语句而不是单独插入)?的详细内容。更多信息请关注PHP中文网其他相关文章!