Python/psycopg2 WHERE IN 语句
Python/psycopg2 WHERE IN statement
通过 SQL 语句中的 %s 获取列表 (countryList) 的正确方法是什么?
# using psycopg2
countryList=['UK','France']
sql='SELECT * from countries WHERE country IN (%s)'
data=[countryList]
cur.execute(sql,data)
就像现在一样,它在尝试 运行 "WHERE country in (ARRAY[...])" 后出错。除了通过字符串操作之外,还有其他方法可以做到这一点吗?
谢谢
对于 IN
运算符,您需要一个 tuple instead of list,并从 SQL 字符串中删除括号。
# using psycopg2
data=('UK','France')
sql='SELECT * from countries WHERE country IN %s'
cur.execute(sql,(data,))
在调试期间,您可以检查 SQL 是否使用
正确构建
cur.mogrify(sql, (data,))
稍微解释一下答案并解决命名参数问题,并将列表转换为元组:
countryList = ['UK', 'France']
sql = 'SELECT * from countries WHERE country IN %(countryList)s'
cur.execute(sql, { # You can pass a dict for named parameters rather than a tuple. Makes debugging hella easier.
'countryList': tuple(countryList), # Converts the list to a tuple.
})
您可以直接使用 python 列表,如下所示。它的作用类似于 SQL 中的 IN 运算符,并且还可以处理空白列表而不会引发任何错误。
data=['UK','France']
sql='SELECT * from countries WHERE country = ANY (%s)'
cur.execute(sql,(data,))
来源:
http://initd.org/psycopg/docs/usage.html#lists-adaptation
通过 SQL 语句中的 %s 获取列表 (countryList) 的正确方法是什么?
# using psycopg2
countryList=['UK','France']
sql='SELECT * from countries WHERE country IN (%s)'
data=[countryList]
cur.execute(sql,data)
就像现在一样,它在尝试 运行 "WHERE country in (ARRAY[...])" 后出错。除了通过字符串操作之外,还有其他方法可以做到这一点吗?
谢谢
对于 IN
运算符,您需要一个 tuple instead of list,并从 SQL 字符串中删除括号。
# using psycopg2
data=('UK','France')
sql='SELECT * from countries WHERE country IN %s'
cur.execute(sql,(data,))
在调试期间,您可以检查 SQL 是否使用
正确构建cur.mogrify(sql, (data,))
稍微解释一下答案并解决命名参数问题,并将列表转换为元组:
countryList = ['UK', 'France']
sql = 'SELECT * from countries WHERE country IN %(countryList)s'
cur.execute(sql, { # You can pass a dict for named parameters rather than a tuple. Makes debugging hella easier.
'countryList': tuple(countryList), # Converts the list to a tuple.
})
您可以直接使用 python 列表,如下所示。它的作用类似于 SQL 中的 IN 运算符,并且还可以处理空白列表而不会引发任何错误。
data=['UK','France']
sql='SELECT * from countries WHERE country = ANY (%s)'
cur.execute(sql,(data,))
来源: http://initd.org/psycopg/docs/usage.html#lists-adaptation