Python 在准备好的语句中使用列表
我想在我的Python 在准备好的语句中使用列表,python,list,set,prepared-statement,psycopg2,Python,List,Set,Prepared Statement,Psycopg2,我想在我的execute中使用Pythonlist(或者实际上是set),但我不太明白 BRANDS = { 'toyota', 'ford', 'dodge', 'spyker' } cur = connection.cursor() cur.execute("SELECT model FROM cars WHERE brand IN (%s)", (list(BRANDS),) 如何在psycopg2中的in子句中使用集合或列表?psycopg2将列表转换为数组,(%s)
execute
中使用Pythonlist
(或者实际上是set
),但我不太明白
BRANDS = {
'toyota',
'ford',
'dodge',
'spyker'
}
cur = connection.cursor()
cur.execute("SELECT model FROM cars WHERE brand IN (%s)", (list(BRANDS),)
如何在psycopg2中的
in
子句中使用集合
或列表
?psycopg2将列表转换为数组,(%s)
表示元组中的单个值,因此这显然是不正确的
您要做的是:
- 让postgres将一个元组转换为一个元组
cur.execute(“从%s中品牌所在的汽车中选择型号”,(元组(品牌),)
- 对数组使用数组运算符
cur.execute(“从品牌=任何(%s)的汽车中选择型号),(列表(品牌),)
=any()
,因为键入更有意义,即使参数为空也可以工作,postgres不喜欢空元组,因此brand in()
会生成错误brand=any(“{}”)
但是工作正常
哦,psycogp2的execute
对参数列表非常满意,我发现它更具可读性,更不容易出错,所以我推荐它:
cur.execute(
“从品牌=任何(%s)的车型中选择车型”[
名单(品牌)
])
试试元组(品牌)
@IonutTicus No.同样的错误。不,使用+
或%
进行查询是错误的。@IonutTicus我想你回答的子线程错了,是想回复@masklin:有人建议使用%的评论,但被删除了。谢谢。元组
,并在中的后保留括号,将其修复。@BartFriederichs当然可以