我的问题与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');
答案 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])。