Python准备语句.SELECT IN的问题

pmu*_*ens 4 python mysql sql prepared-statement

我在Python中有一个准备好的语句的问题我到目前为止无法解决.

应该执行的Query是例如:

 SELECT md5 FROM software WHERE software_id IN (1, 2, 4)
Run Code Online (Sandbox Code Playgroud)

所以我尝试执行这样的查询:

software_id_string = "(2, 3, 4)"
cursor.execute("SELECT md5 FROM software WHERE software_id IN %s", 
                software_id_string)
Run Code Online (Sandbox Code Playgroud)

问题是有''添加到字符串 - >'(2,3,4)',因此查询将是:

SELECT md5 FROM software WHERE software_id IN ''(2, 3, 4)''
Run Code Online (Sandbox Code Playgroud)

我也试过像这样重建脚本:

software_id_string = " 1 OR software_id = 2"
cursor.execute("SELECT md5 FROm software WHERE software_id = %s", 
              software_id_string)
Run Code Online (Sandbox Code Playgroud)

这仅适用于将提交的第一个id(在本例中为1),因为OR部分不会作为SQL语句进行处理...

是否有可能用准备好的陈述来解决问题?

ber*_*nie 6

参数列表中的每个项目都需要一个占位符.
您可以使用字符串操作来完成该部分:

  1. %s为每个参数创建一个,和
  2. 加上逗号一起加入.

在下一步中,您可以execute()按照DB-API文档中的建议传递两个参数.

software_id_string = (1,2,4)
qry = '''SELECT md5 
           FROM software 
          WHERE software_id IN (%s)''' % ','.join(['%s']*len(software_id_string))
# // 'SELECT md5 FROM software WHERE software_id IN (%s,%s,%s)'
cursor.execute(qry, software_id_string)
Run Code Online (Sandbox Code Playgroud)