gpt4 book ai didi

django - 如何获取 AutoField 的计数器值?

转载 作者:行者123 更新时间:2023-12-05 05:23:38 24 4
gpt4 key购买 nike

如何获取 AutoField 的计数器值,例如大多数模型常用的 id 字段?

此刻,我做的是:

MyModel.objects.latest('id').id

但是当所有对象都已从数据库中删除时,这就不起作用了。

当然,与数据库无关的答案是最好的。

编辑

Model next available primary key 中接受的答案与我的问题不太相关,因为我不打算使用计数器值来创建新对象。我也不介意我得到的值是否非常准确。

最佳答案

背景。

据我所知,没有与数据库无关的查询。不同的数据库以不同的方式处理自动增量,并且很少有 django 的用例来找出下一个可能的自动增量 ID 是什么。

进一步详细说明,在 postgresql 中您可以执行 select nextval('my_sequence') 而在 mysql 中您需要使用 last_insert_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

关于django - 如何获取 AutoField 的计数器值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com