繁体   English   中英

Python SQL executemany 语句不起作用

[英]Python SQL executemany statement doesn't work

我正在尝试执行删除语句,该语句检查表中是否存在数据帧的 SKU 列中存在的任何 SKU。 如果是,它会删除该行。

supplier_name = input("Enter supplier name of the supplier you are updating: ")
df = pd.read_csv("update.csv",sep=',')
cursor = mydb.cursor()
column = df["SKU"]
print(column)
query="""DELETE FROM price_calculations1(Supplier_Name, SKU) VALUES(?,?)"""
cursor.executemany(query,(supplier_name, column))
mydb.commit()
cursor.close()

将代码更改为;

cursor = mydb.cursor()
column = df["SKU"]
print(column)
query="""DELETE FROM price_calculations1 WHERE Supplier_Name=? AND SKU=?"""
cursor.executemany(query,(supplier_name, column))
mydb.commit()
cursor.close()

它给了我以下错误:

mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行 mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error '(Supplier_Name, SKU) VALUES(?,?)'附近使用的正确语法在您的 SQL 语法中; 检查与您的 MySQL 服务器版本相对应的手册,了解在 '? AND SKU=?' 在第 1 行

这不是删除语句的正确语法。

您可以参考文档了解更多详情: https : //dev.mysql.com/doc/refman/8.0/en/delete.html

正确的语法是:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

在您的情况下,您的声明应如下所示:

DELETE FROM price_calculations1
WHERE Supplier_Name=%s
AND SKU=%s

要使用参数化语句(又名准备语句),您必须按如下方式创建游标:

cursor = mydb.cursor(prepared=True)

另请注意, executemany需要可迭代对象(或“序列或参数”)的可迭代对象,而supplier_name名称只是一个字符串,因此您也必须对其进行更改。

文档中的 executemany 示例:

data = [
  ('Jane', date(2005, 2, 12)),
  ('Joe', date(2006, 5, 23)),
  ('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)

来源: https : //dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM