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
Python 在单个数据库调用中计算多个查询集_Python_Django_Django Orm - Fatal编程技术网

Python 在单个数据库调用中计算多个查询集

Python 在单个数据库调用中计算多个查询集,python,django,django-orm,Python,Django,Django Orm,假设我有一个未赋值查询集列表: q_list = [a.objects.all(), b.objects.all(),...] 我想在一个数据库调用中一次评估所有它们。我可以迭代列表,并像下面这样单独评估它们: evaluated_q_list = map(list, q_list) 但这将产生多个db查询。是否可以使用Django ORM在单个db查询中执行此操作?如果您希望在这里将两个查询与SQLUNION操作组合在一起 但不清楚为什么要将其强制到单个查询中;关于您的用例的更多信息将有助

假设我有一个未赋值查询集列表:

q_list = [a.objects.all(), b.objects.all(),...]
我想在一个数据库调用中一次评估所有它们。我可以迭代列表,并像下面这样单独评估它们:

evaluated_q_list = map(list, q_list)

但这将产生多个db查询。是否可以使用Django ORM在单个db查询中执行此操作?

如果您希望在这里将两个查询与SQL
UNION
操作组合在一起


但不清楚为什么要将其强制到单个查询中;关于您的用例的更多信息将有助于提出建议。

我不能使用UNION,因为我正在使用django 1.8。关于用例,我希望尽量减少IO操作,因为数据库可能存在于通过网络连接的不同机器中。许多生产Django部署都涉及在单独机器上的数据库。虽然考虑如何减少查询计数是很好的,但尝试对所有内容强制执行单个查询是过早的优化;首先,让你的应用程序运行,然后对其进行分析,看看性能的影响在哪里,然后使用缓存或更高效的查询作为你的第一选择。你是否检查了@Pabasara Ranathunga,问题是关于连接列表,我想通过在一次调用中评估所有查询集来最小化往返时间。q_列表是否已经得到评估?尝试打印q_列表中每个元素的长度否,它不会。下面是一个小测试:
从django.db导入连接l=[a.objects.all()]打印(len(connection.querys))#将打印0