就以 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.py
1. 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 ?
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.py
1. 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 ?