【问题标题】:Check for multiple values exists in database in MySQLdb python?检查MySQLdb python中的数据库中是否存在多个值?
【发布时间】:2017-03-03 22:08:55
【问题描述】:

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

insert_enquiry =  """SELECT P_ID,Jobname FROM build_table WHERE Build_number IN %s;""" % insert_constraint

insert_constraint 这里是一个数字列表。 Build_number 是一个包含整数的列。如果我尝试使用以下方式执行此查询:

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

编辑:

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

由于某种原因,这仅采用列表 insert_constraint 中的最后一个元素。

【问题讨论】:

  • 难道不是 IN(...) 而不是 IN[...] 吗?
  • 是的,我已对问题进行了编辑。它以某种方式获取列表中的最后一个元素 insert_constraint 并跳过列表中的所有元素。

标签: python mysql mysql-python


【解决方案1】:

感谢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)

这解决了问题。

【讨论】:

    猜你喜欢
    • 2015-10-19
    • 2021-12-11
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 2011-05-16
    • 2013-04-12
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多