有没有办法将python列表作为pymysql中预准备语句的参数传递?
list_id = [1,2,3]
sql = "select * from table where id in (%s)"
cursor.execute(sql,(list_id,))
答案 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
库执行许多游标执行的引用。希望它有所帮助。
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或在上面的重复答案中提到的防止构造疯狂语句。 )