就以 django orm 举例子
user = UserModel.objects.create(name="haha")
print(
user.id)
>>> 666
我的问题是 这个
user.id 为什么能保证是正确的。 当有并发插入的时候,django/数据库是如何保证事物约束的?
我翻了 django 的源码,django 是利用两条语句实现的
https://github.com/django/django/blob/main/django/db/models/sql/compiler.py1. insert # cursor.execute(sql, params)
2. select id from user # self.connection.ops.last_insert_id(
两条 sql 语句中间如何插入了另一条数据, 获取最新的 id 就是不正确的了。
不知道是不是这句话起作用了:with self.connection.cursor() as cursor:
另一个问题也困扰我好多年: 什么是 cursor ?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://tanronggui.xyz/t/842931
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.