传递列表作为查询的参数

时间:2018-05-30 18:50:09

标签: python mysql pymysql

有没有办法将python列表作为pymysql中预准备语句的参数传递?

list_id = [1,2,3]
sql = "select * from table where id in (%s)"
cursor.execute(sql,(list_id,))

3 个答案:

答案 0 :(得分:1)

我会这样做。

list_id = [1,2,3]
sql = "select * from table where id in ({})".format(",".join([str(i) for i in list_id]))
print(sql)

Out[]: "select * from table where id in (1,2,3)"

如果您需要另一种运行执行的方法,这里是另一个通过pyodbc库执行许多游标执行的引用。希望它有所帮助。

cursor.executemany

  

executemany(sql,* params)

     

为每个集执行相同的SQL语句   参数,返回无。单参数必须是a   序列序列或序列发生器。

     

params = [('A',1),('B',2)] executemany(“插入到t(名称,id)   values(?,?)“,params)这将执行两次SQL语句,   一次带('A',1),一次带('B',2)。

答案 1 :(得分:0)

如果您的列表只有整数,那么您必须将它们与','组合并传递为字符串。

答案 2 :(得分:0)

list_id = [1,2,3]
# not working:
list_str = ', '.join(list_id)
# most likely:
list_str = ', '.join(map(str, list_id))

但更好的方法是,使用https://www.python.org/dev/peps/pep-0249/#paramstyle或在上面的重复答案中提到的防止构造疯狂语句。 )