django模型选择单场

zen*_*enk 72 python django django-models

我有一个表/模型调用Employees,我想将单个字段的所有行作为查询集.

我知道我可以这样做(希望我能做到这一点):

emp_list = Employees.objects.get(all)
emp_names = emp_list.eng_name
Run Code Online (Sandbox Code Playgroud)

会在数据库中查询所有字段并只使用一个吗?这样做有更好(更快)的方法吗?

Dan*_*man 127

Employees.objects.values_list('eng_name', flat=True)
Run Code Online (Sandbox Code Playgroud)

这创建了所有eng_names 的平面列表.如果你想要每行多个字段,你就不能做一个平面列表:这将创建一个元组列表:

Employees.objects.values_list('eng_name', 'rank')
Run Code Online (Sandbox Code Playgroud)

  • 请分享该文件.这将有助于他人 (3认同)

Osk*_*son 18

除了values_list丹尼尔 提到你也可以使用only(或defer为相反的效果),只得到有他们的ID和指定的字段对象的查询集:

Employees.objects.only('eng_name')
Run Code Online (Sandbox Code Playgroud)

这将运行单个查询:

SELECT id, eng_name FROM employees
Run Code Online (Sandbox Code Playgroud)

  • 此命令将返回我的 Django 2.1.3 版和 python 3.6.2 版的所有字段。 (5认同)
  • 它只会获取这一字段,但如果您尝试访问其他字段,则会执行单独的数据库查询。因此,这是一种很好的优化技术,但请确保您不会创建这些额外的查询。否则,您将失去性能而不是获得性能。 (3认同)

小智 12

我们可以选择必填字段而不是值。

Employee.objects.all().values('eng_name','rank')
Run Code Online (Sandbox Code Playgroud)


Sum*_*ise 9

丹尼尔的回答当场就对了。如果要查询多个字段,请执行以下操作:

Employee.objects.values_list('eng_name','rank')
Run Code Online (Sandbox Code Playgroud)

这将返回元组列表。查询多个字段时不能使用named=Ture。

此外,如果您知道只有一个字段包含该信息,并且您知道 pk id,那么请执行以下操作:

Employee.objects.values_list('eng_name','rank').get(pk=1)
Run Code Online (Sandbox Code Playgroud)