检查MySQLdb python中的数据库中是否存在多个值?

时间:2016-10-21 14:32:27

标签: python mysql mysql-python

我的要求是检查表中是否有与列的值列表匹配的条目。我使用以下查询:

D

insert_constraint这里是一个数字列表。 Build_number是一个具有整数的列。如果我尝试使用:

执行此查询
insert_enquiry =  """SELECT P_ID,Jobname FROM build_table WHERE Build_number IN %s;""" % insert_constraint

我收到以下错误:

cursor.execute(insert_enquiry)

我认为这是因为列表中出现了方括号。我试图通过将列表转换为字符串来删除它们,但后来我得到了相同的错误,因为现在整数列表被转换为字符串。

我还尝试了以下语法:

MySQL Error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[184, 931, 1005, 1070, 165, 99, 365, 930, 164, 98' at line 1

这会出现以下错误:

insert_enquiry =  """SELECT P_ID,Jobname FROM product_build WHERE Build_number IN %s;"""
cursor.executemany(insert_enquiry, insert_constraint)

编辑:

MySQL Error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '184' at line 1

由于某种原因,这只会占用list_constraint列表中的最后一个元素。

1 个答案:

答案 0 :(得分:0)

感谢https://stackoverflow.com/a/4574647/4077331

我们的想法是将len(insert_constraint)%s添加到查询字符串中。通过执行此操作,查询将接受WHERE IN子句

的列表
insert_enquiry =  "SELECT build_number,jobname FROM %s WHERE build_number IN (%s);"
insert_enquiry_string =', '.join(map(lambda x: '%s', insert_constraint_build_num))
insert_enquiry = insert_enquiry % (table_name, insert_enquiry_string)
cursor.execute(insert_enquiry, insert_constraint_build_num)

这解决了这个问题。