flask-sqlalchemy 默认是开始事务的,那么如何标记一组操作为一个 transaction 要么全成功要么全失败?

2019-12-16 17:08:43 +08:00
 kuzicala
以下代码片段,提供的参数要求具有唯一性,所以最后一条肯定插入失败,但是前两条却成功了。
想要的效果是,把这三个插入最为一个事务呢,要么全成功要么全失败
try:
db.session.add(Order("a1"))
db.session.add(Order("a2"))
db.session.add(Order("a2"))
db.session.commit()
except Exception as e:
db.session.rollback()
raise e
3106 次点击
所在节点    Python
4 条回复
Latin
2019-12-17 09:22:48 +08:00
db.session.add(Order("a1"),Order("a2"),Order("a2")) ?
kuzicala
2019-12-17 13:27:01 +08:00
@Latin add 方法不支持多参数啊
Latin
2019-12-17 16:47:58 +08:00
@kuzicala add_all
kayseen
2019-12-23 11:11:41 +08:00
测试了一下,就算你不用 add_all, 比如 a1 和 a2 正常, a3 有问题, 那么在你最后 commit 的时候, 前面的也并不会成功提交

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629537

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX