[英]Python MYSQL dynamic variables error with SQL syntax
我在下面写了 function:
def update_record(col, new_value, date, finance_manager_table, connection):
finance_manager_table.execute("""
UPDATE financemanager
SET %s = %s
WHERE Date = %s
""", (col, new_value, date))
connection.commit()
然后我尝试使用以下命令调用 function: dbc.update_record("Salary", "2500", "January/22", finance_manager_table, connection)
然后遇到错误:
mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“薪水”= 2500 WHERE Date = 'January/22'' 附近使用正确的语法
所以看起来它创建了正确的陈述,但仍然是错误的。
我已经删除了“col”,而是写了“SET Salary = %s”,这很有效。
写“SET %s = %s”是不对的,还是有其他问题?
谢谢! 亚当
您需要对数据库 object 名称(表、列等)使用 Python 的字符串格式化方法之一(f-string、.format),将它们包装在反引号中并使用%s
替换 the.execute( ) 防止 SQL 注入的值的方法:
def update_record(col, new_value, date, finance_manager_table, connection):
finance_manager_table.execute(f"""
UPDATE financemanager
SET `{col}` = %s
WHERE Date = %s
""", (new_value, date))
connection.commit()
或者
def update_record(col, new_value, date, finance_manager_table, connection):
finance_manager_table.execute("""
UPDATE financemanager
SET `{}` = %s
WHERE Date = %s
""".format(col), (new_value, date))
connection.commit()
使用 Python 3 的 f-Strings:改进的字符串格式化语法
s = f"""
UPDATE financemanager
SET {col} = {new_value}
WHERE Date = '{date}'
"""
finance_manager_table.execute(s)
我认为您收到错误的原因是因为在您的查询部分SET %s = %s
中,您传入的第一个变量被解释为字符串,因此它用单引号括起来。 这导致它不能被识别为列名。 换句话说,它将查询的那部分转换为SET 'Salary' = 2500
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.