使用python list IN postgresql query

时间:2016-09-13 00:19:08

标签: python postgresql

我的问题与this非常相似,但我的列表中有字符串而不是整数。

我的python list

list = ['a', 'b'] #number of items varies from 1 to 6

我想在像这样的Postgres查询中使用此列表

select * from sample where sub in ('a', 'b');

我可以使用tuple(list)来获取('a', 'b'),当我的列表长度变为一个时,这没有用。我正在努力寻找一种转换方式 ['a']('a')
['a', 'b']('a', 'b')

我试过了

In[91]: myquery = "select * from sample where sub in (%s)" % ",".join(map(str,list))
In[92]: myquery
Out[92]: 'select * from sample where sub in (a,b,c)'

但是postgres期待

select * from sample where sub in ('a', 'b');

3 个答案:

答案 0 :(得分:1)

我还没有使用python的绑定到postgresql所以我不知道是否可以将python列表(或元组)绑定到查询中的占位符,但是如果它是的,那么您可以使用ANY运算符,如下所示:

SELECT * FROM sample WHERE sub = ANY (%s);

并将列表绑定为唯一参数。

答案 1 :(得分:1)

使用psycopg2,它会为您正确处理这个问题,因为您尚未想到各种边缘情况。有关您的具体问题,请参阅 http://initd.org/psycopg/docs/usage.html#adapt-tuple

答案 2 :(得分:-3)

尝试"," .join(["' {0}'" .format(s)for s in list])。