Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在准备好的语句中使用列表_Python_List_Set_Prepared Statement_Psycopg2 - Fatal编程技术网

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
中使用Python
list
(或者实际上是
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当然可以