2014-11-14 58 views
0

我需要運行一個原始查詢並且WHERE子句是一個INDjango,Postgres DB,原始查詢和有界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: syntax error at or near "ARRAY" LINE 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子句?

+1

PostgreSQL的這個答案應該有所幫助:http://stackoverflow.com/a/22008870/3246440 – 2014-11-14 15:57:51

+0

[路過列表或元組作爲可能的重複參數在Django的原始SQL](http://stackoverflow.com/questions/6895051/passing-lists-or-tuples-as-arguments-in-django-raw-sql) – 2014-11-14 16:10:50

回答

0

而不是list()通參數tuple()這樣的:

return list(Ooo.objects.raw(
    sql, 
    params=(tuple(ooo_ids),) 
))