我是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])

08-19 14:25