如何获取AutoField
的计数器的值,例如大多数模型的常用id
字段?
目前,我这样做:
MyModel.objects.latest('id').id
但是,当从数据库中删除所有对象时,这不起作用。
当然,数据库无关的答案最好。
修改
Model next available primary key中接受的答案与我的问题不太相关,因为我不打算使用计数器值来创建新对象。我也不介意我得到的价值是不是非常准确。
答案 0 :(得分:1)
AFAIK没有数据库无关的查询。不同的数据库以不同的方式处理自动增量,并且很少有django的用例来找出下一个可能的自动增量ID是什么。
进一步详细说明,在postgresql中你可以做select nextval('my_sequence')
而在mysql中你需要使用last_insert_id()但是它返回的是最后一个插入的ID,而不是下一个插入的ID实际上是非常不一样!要获得实际值,您需要使用'SHOW TABLE STATUS'
创建记录,保存,检查其ID并删除它。 这将更改下一个ID,但您已表明只需要近似值。
另一种方法是使用回滚执行手动事务。如果是mysql,这也会改变下一个id。
from django.db import transaction
@transaction.atomic
def find_next_val(mymodel):
try:
# ...
obj = mymoel.objects.create(....)
print obj.id
raise IntegrityError
except IntegrityError:
pass