【问题标题】:How do i get the highest ID of an item within a database in djngo?如何在 django 的数据库中获取项目的最高 ID?
【发布时间】:2020-12-31 09:33:32
【问题描述】:

当我尝试保存一个新项目时,我需要在数据库中找到具有最高 ID 的项目,以便为其加 1 并将下一个项目按顺序保存在数据库中。简单地计算数据库中的项目是行不通的,就像删除一个项目一样,计数将不正确。

我没有要修复的代码,但伪代码看起来像:

look at all the items in the DB
Find the item with the highest ID 
Add one to that number
save the new item with the new highest id in the DB

我正在使用 Django。因此它应该使用 Django 和/或 python 中的查询集。

【问题讨论】:

    标签: django django-models django-views django-database


    【解决方案1】:

    默认情况下,Django 模型的字段id 是自动递增的,因此每当您将新对象保存到数据库时,它都会完全按照您的意愿进行操作 - 保存 id 大于最后一个对象的 id 的对象。

    无论如何,您可以通过多种方式从数据库中检索最新的 id。 最有效的方法(最简单和最快的数据库查询,因为您只希望返回 id 值,而不是整个对象)是这样说:

    latest_id = Model.objects.all().values_list('id', flat=True).order_by('-id').first()
    

    查询集如下所示:

    SELECT 'model'.'id' FROM 'model' ORDER BY 'model'.'id' DESC  LIMIT 1; 
    

    all() 从数据库中获取模型的所有对象,values_list('id', flat=True) 仅提取 id 字段的值(这样可以节省您的时间,因为您不会检索所有模型字段),order_by('-id') 按 id 排序对象按降序排列,first() 为您提供所需的结果,即最后一个 id。

    还有像last() 这样的方法与first() 方法相反。它从数据库或方法latest('id') 中检索模型的最后一个完整对象,它执行相同的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 2015-03-13
      相关资源
      最近更新 更多