gpt4 book ai didi

python - 我什么时候应该使用 for 循环提交 SQLAlchemy?

转载 作者:IT老高 更新时间:2023-10-29 00:04:23 26 4
gpt4 key购买 nike

哪个是正确的?我知道第一个会起作用,但我怀疑它对数据库的工作比可能需要的要多。第二个是否同样有效,但对数据库的工作更少?我正在使用 MySQL FWIW。

for item in items:
db.session.add(item)
db.session.commit()

for item in items:
db.session.add(item)
db.session.commit()

最佳答案

我认为您的第二个解决方案更好,但这取决于您如何配置 session 。特别是自动刷新和自动提交设置。此外,您应该使用对事务有良好支持的引擎,例如 innodb。

假设您同时关闭了 autocommit 和 autoflush,那么您将把插入刷新到服务器,提交之前的事务,然后在每次迭代时创建另一个事务,这在 SQLAlchemy 和 MySQL 中都会产生大量不必要的工作。

如果你有一个简单的项目列表,我会推荐使用 add_all 来添加你的例子,否则如果你确实需要循环,那么一定要在循环外应用提交。

http://docs.sqlalchemy.org/en/latest/orm/session.html#sqlalchemy.orm.session.Session.add_all

db.session.add_all(items)
db.session.commit()

附加说明,如果在循环的中途出现问题,您的事务将仅回滚到您在循环中的先前提交,如果您正在使用事务,这可能不是您想要的。例如,如果在循环中途发生错误,则列表中只有一半的项目可能会写入数据库。而在循环外调用 commit 可以保证你的循环已经完成并且将全部提交或全部回滚。

关于python - 我什么时候应该使用 for 循环提交 SQLAlchemy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14665834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com