Django:合并n个原始查询集结果
使用类似以下查询的Django原始查询集的结果:Django:合并n个原始查询集结果,django,python-2.7,Django,Python 2.7,使用类似以下查询的Django原始查询集的结果: for employee in employees: staff = Staff.objects.raw('Long query... WHERE employee_id= %s', [employee.id]) 我创建了一个列表,然后创建了一个字典 final_list = [] for s in staff: a = { 'first_name' :
for employee in employees:
staff = Staff.objects.raw('Long query... WHERE employee_id= %s', [employee.id])
我创建了一个列表,然后创建了一个字典
final_list = []
for s in staff:
a = {
'first_name' : s.first_name,
}
final_list.append(dict(a))
print(final_list)
因此:
[{'first_name':u'John'}, {'first_name':u'Jill'}]
[]
[{'first_name':u'James'}, {'first_name':u'Susan'}]
[{'first_name':u'Bill'}]
如何合并结果以获得如下结果:
[{'first_name':u'John'}, {'first_name':u'Jill'}, {'first_name':u'James'}, {'first_name':u'Susan'}, {'first_name':u'Bill'}]
您应该将每个
final\u列表
附加到另一个列表final\u列表
:
您可以将这些内容与列表理解连接起来:
但以上这些都不是一个好主意。您只需重写查询并在一次过程中获取所有数据:
staff = Staff.objects.raw(
'Long query... WHERE employee_id IN (%s)',
[[e.id for e in employees]]
)
result = [{'first_name': s.first_name} for s in staff]
staff=staff.objects.raw(
'长查询…其中员工id位于(%s)',
[[e.id代表e-in员工]]
)
结果=[{'first\u name':s.first\u name}代表员工中的s]
通常,性能与数据库的往返量成线性关系,因此通过在单个查询中获取所有数据,可以提高性能
实际上,使用原始查询通常不是一个好主意:它不太具有声明性,ORM有时可以稍微优化查询,如果以后更改数据库方言,查询会自动使用另一种方言。使用列表理解时,我得到了相同的结果:[li代表l in final\u list代表li in l]。编辑查询会导致以下错误:“并非所有参数都在字符串格式化期间转换”。@spaghetti\u代码:您当然需要收集不同迭代的结果……查询仍然会给我相同的错误,但列表理解工作正常。谢谢大家!@意大利面条代码:啊,在查询中,你需要把它包装在一个单件列表中。请参阅编辑。我再次尝试重写查询,但出现错误“操作数应包含1列”。我认为这个错误与我原始查询的结构有关。。。不过,这个答案背后的理论是正确的。
staff = Staff.objects.raw(
'Long query... WHERE employee_id IN (%s)',
[[e.id for e in employees]]
)
result = [{'first_name': s.first_name} for s in staff]