我是python新手,尝试使用列表上的IN
更新所有行(id在列表中提供)的一个列值(true/false)。
我的问题是这样的:
qry = "Update table Set "\
"col1 = %s "\
"where col2 in ( " + ",".join( "%s" for _ in lstIds)
qry += ")"
cursor.execute(qry,(col1Value, lstIds))
但我犯了错误
格式字符串的参数不足
我尝试过不同的解决方法,但无法解决我的问题。
当我这样更改查询时,
it works fine
qry = "Update table Set "\
"col1 = 1 "\
"where col2 in ( " + ",".join( "%s" for _ in lstIds)
qry += ")"
cursor.execute(qry,( lstIds))
所以我猜问题出在第一个参数值,但我不知道如何解决这个问题。
任何帮助都将不胜感激。
最佳答案
您需要将lstIds
中的每个值作为单独的参数包括在内:
cursor.execute(qry, (col1Value,) + lstIds)
假设
lstIds
是元组,或者cursor.execute(qry, [col1Value] + lstIds)
如果是单子。
或者可以将序列组合成一个列表,并在Python3.5和更新版本中使用
*
符号:cursor.execute(qry, [col1Value, *lstIds])