使用 Django 在数据库中获取不需要的特定记录的最快方法

Posted

技术标签:

【中文标题】使用 Django 在数据库中获取不需要的特定记录的最快方法【英文标题】:Fastest way to get a not required specific record in database using Django 【发布时间】:2021-08-27 17:34:27 【问题描述】:

使用 Django 获取特定记录(可能存在或不存在)的最快方法是什么。

一些可能的方法:

results = ModelExample.objects.filter(label="example1")
if(results.exists())
   item = results.first()

results = ModelExample.objects.filter(label="example1")
if(len(results) > 0)
   item = results.first()

*** 编辑 ***

我最初的问题并不清楚,我真正的搜索是从查询集返回的可空对象中获取属性的方法,如果对象存在,则获取属性,如果不返回 None。

我在 javascript 上寻找类似于 item?.value 的东西。

幸运的是@Willem 帮助我在接受的答案上显示 getattr(...) 函数。

【问题讨论】:

【参考方案1】:

item = ModelExample.objects.filter(label="example1").first()

.first() "返回查询集匹配的第一个对象,如果没有匹配的对象则返回None。"

https://docs.djangoproject.com/en/3.2/ref/models/querysets/

【讨论】:

【参考方案2】:

您可以使用.first()。如果item不存在,会返回None,所以:

result = ModelExample.objects.filter(label='example1').first()
if result is None:
    # does not exists
    # …
    pass

您可以使用单线来获取属性:

result = getattr(
    ModelExample.objects.filter(label='example1').first(),
    'name-of-the-attribute',
    None
)

【讨论】:

它有一种很好的方式从这个项目中获取一个属性,案例存在,在一行中?如果不存在则返回 None.. 类似于 item?.value 在 JavaScript 上的东西 @PatrickFreitas:您可以使用 getattr(...)。如果该属性不存在,那么这里会返回None 太棒了!这正是我一直在寻找的,我厌倦了一遍又一遍地验证多行中一个对象的存在。谢谢!

以上是关于使用 Django 在数据库中获取不需要的特定记录的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

Django-filter 在传递 filter_field 的特定值时获取所有记录

如何在 django 中仅获取表的特定列? [复制]

如何在 django admin 中获取对象的历史记录?

如何使用 Django 获取特定的 id 数据(多个 id 存储在列表中)

如何从 django 模板中的 for 循环中获取特定的 id?

从应用程序更改时,django 简单历史记录不起作用