我寫了下面的函式:
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()
然后我嘗試使用以下方法呼叫該函式:
dbc.update_record("Salary", "2500", "January/22", finance_manager_table, connection)
然后遇到錯誤:
mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 語法有錯誤;檢查與您的 MySQL 服務器版本相對應的手冊,了解在第 2 行的“Salary” = 2500 WHERE Date = 'January/22'' 附近使用的正確語法
所以看起來它創建了正確的陳述句,但仍然有些錯誤。
我已經洗掉了“col”,而是寫了“SET Salary = %s”,這已經奏效了。
寫“SET %s = %s”是錯誤的,還是其他的有問題?
謝謝!亞當
uj5u.com熱心網友回復:
您需要對資料庫物件名稱(表、列等)使用 Python 的字串格式化方法之一(f-string、.format),這也是一個好主意,將它們包裝在反引號中并使用%s.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()
uj5u.com熱心網友回復:
使用 Python 3 的 f-Strings:改進的字串格式語法
s = f"""
UPDATE financemanager
SET {col} = {new_value}
WHERE Date = '{date}'
"""
finance_manager_table.execute(s)
uj5u.com熱心網友回復:
我認為您收到錯誤的原因是在您的查詢部分,您SET %s = %s傳入的第一個變數被解釋為字串,因此它用單引號括起來。這導致它不能被識別為列名。換句話說,它正在將查詢的那部分變成SET 'Salary' = 2500
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/396734.html
上一篇:MySQL存盤坐標的不同方法
