Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
如何在另一个queryset中使用Django中的原始查询?_Django_Django Orm - Fatal编程技术网

如何在另一个queryset中使用Django中的原始查询?

如何在另一个queryset中使用Django中的原始查询?,django,django-orm,Django,Django Orm,我有一个纯SQL查询集: SELECT ft2.user_id, avg(...) figure, count(...) as figure_count FROM figures_table ft, figures_table ft2 WHERE ft.user_id=%(current)s AND ft.user_id != ft2.user_id AND ft2.user_id IN (%(others)s) GROUP BY ft2.user_id 我想

我有一个纯SQL查询集:

SELECT ft2.user_id, avg(...) figure, count(...) as figure_count
FROM figures_table ft,
     figures_table ft2
WHERE ft.user_id=%(current)s AND
      ft.user_id != ft2.user_id AND
      ft2.user_id IN (%(others)s)
GROUP BY ft2.user_id
我想再做一个:

SELECT %(id)s as id,
       avg(figure * figure_count) figure
FROM (%(subquery)s) subquery
其中,
%(子查询)s
是第一个查询。当我尝试执行命令时,例如

User.objects.raw(second_query, {'subquery': first_qs.query})
它引发异常:
无法调整类型QuerySet
。传递字符串也不起作用,因为它在结果查询中被引用。我应该用嵌套查询格式化字符串吗

我应该用嵌套查询格式化字符串吗

这就是原始SQL的基本用途

它抱怨是因为您试图将SQL放入一个可变参数槽中,而db适配器不知道如何做到这一点。(事实上,在其他情况下,您所做的将是SQL注入攻击,而参数化查询正是为了防止这种攻击而设计的)

只需使用常规的字符串格式化操作来加入查询,并将其用作下一个原始查询集的源

(如果您对SQL中的任何“%”字符使用python字符串插值,请记住对其进行转义)