Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:合并n个原始查询集结果_Django_Python 2.7 - Fatal编程技术网

Django:合并n个原始查询集结果

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' :

使用类似以下查询的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' : 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]