如何获取AutoField计数器的值?

时间:2016-05-15 03:07:02

标签: django django-models

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

目前,我这样做:

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

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

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

修改

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

1 个答案:

答案 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