如何在另一个queryset中使用Django中的原始查询?
我有一个纯SQL查询集:如何在另一个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 我想
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字符串插值,请记住对其进行转义)