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_name
s 的平面列表.如果你想要每行多个字段,你就不能做一个平面列表:这将创建一个元组列表:
Employees.objects.values_list('eng_name', 'rank')
Run Code Online (Sandbox Code Playgroud)
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)
小智 12
我们可以选择必填字段而不是值。
Employee.objects.all().values('eng_name','rank')
Run Code Online (Sandbox Code Playgroud)
丹尼尔的回答当场就对了。如果要查询多个字段,请执行以下操作:
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)