我需要运行原始查询,而WHERE
子句是IN
。
select
o.*,
from
ff_ooo as o
left join
ff_ooostatus s on o.id = s.ooo_id
left join
ff_rrrr r on s.rrrr_id=r.id
where
o.id in %s
group by
o.id
having
r.due_date = max(r.due_date)
我使用
执行它return list(Ooo.objects.raw(
sql,
params=(ooo_ids,)
))
ooo_ids
是一个整数数组。
生成的SQL失败并显示以下错误:
ProgrammingError:“ARRAY”第13行或附近的语法错误:o.id in ARRAY [7,8,9,10,11,12,13,14,15,16,17]
我看到Postgres ORM代码正在将IN
语句绑定参数转换为ARRAY[]
。但是postgres DB不喜欢它。
如何将整数数组正确绑定到Django原始SQL查询中针对postgres数据库的IN
子句?
答案 0 :(得分:0)
而不是list()
将参数传递为tuple()
,如下所示:
return list(Ooo.objects.raw(
sql,
params=(tuple(ooo_ids),)
))