请教关于 django 的 orm 语句同时修改多条数据以及 flush 操作

2020-04-16 09:35:11 +08:00
 kayseen

tips: django 使用的 mysql, 以往用的是 flask 的 sqlalchemy, 比如同时修改了两个不同表的两条数据 user1 的 name=1,class2 的 name=class2,(两条数据没有关联关系), 我可以 model.add(user1),model.add(class2),最后 model.commit()一次性提交,

但是在 django 的 orm 中, 如果有上述的场景, 一次性提交两条修改的数据(开事物?),该怎么实现呢?

找到了 django 的批量创建 bulk_update(), 但是此方法只支持批量更新同张表的多条数据,并且需要指定 fields

问题: 1.批量修改多张表的多条数据怎么一次性提交保存? 2.django 有没有在提交数据之前的 flush 操作(在创建新数据的时候,flush 操作可以获取新数据的 id,但是此时数据并没有保存到 mysql 中)

2636 次点击
所在节点    Python
5 条回复
chen774553620
2020-04-16 09:42:32 +08:00
from django.db import transaction
with transaction.atomic:
kayseen
2020-04-16 09:47:44 +08:00
@chen774553620
了解, 真棒~
Vegetable
2020-04-16 09:47:56 +08:00
kayseen
2020-04-16 10:03:42 +08:00
@Vegetable
这个东西看过啦哈哈, 请问您知道关于 django 的 flush 操作吗?
EricCartmann
2020-04-16 10:05:29 +08:00
一楼已经终结这个问题。transaction 模块完美解决,加上 with transaction.atomic()还可以提供事务的特性👍🏿,引入一个 savepoint 还可以回滚。

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

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

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

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

© 2021 V2EX