猿问

使用来自 python 的 ON DUPLICATE KEY UPDATE

我正在尝试使用此代码更新 mySQL 上的表,但更新部分出现错误


table_name = 'my_table'

sql_select_Query = """ 

INSERT {0}  (age, city, gender,UniqueId)

VALUES ({1},{2},{3},{4})

ON DUPLICATE KEY UPDATE 

  age=VALUES(age,city=VALUES(city),gender=VALUES(gender),height=VALUES(height)

""".format(table_name,  '877','2','1','2898989')


    cursor = mySQLconnection .cursor()

    cursor.execute(sql_select_Query)

    mySQLconnection.commit()

例如,要更新我得到的城市:


Unknow columns '877'

因此,它似乎将该值作为列名并在 my_table 中搜索 then。


慕慕森
浏览 175回答 1
1回答

当年话下

在 Python 中使用参数的正确方法是在execute()调用中传递值,而不是将值插入到 SQL 查询中。除了您的情况下的表名等标识符。sql_select_Query = """INSERT `{0}`  (age, city, gender, UniqueId)VALUES (%s, %s, %s, %s)ON DUPLICATE KEY UPDATE  age=VALUES(age), city=VALUES(city), gender=VALUES(gender)""".format(table_name)cursor.execute(sql_select_Query, ('877', '2', '1', '2898989'))另请参阅MySQL 参数化查询你忘了)后面VALUES(age。也许这只是您将问题转录到 Stack Overflow 中的一个错字。我已经在上面的示例中修复了它。您的 INSERT 语句设置height列,但它不是您插入的元组的一部分。我在上面的示例中删除了它。如果要height在 UPDATE 子句中,则需要将其包含在元组中并在参数中传递一个值。此外,我在表名周围加上反引号,以防表名是保留关键字或包含空格或其他内容。
随时随地看视频慕课网APP

相关分类

Python
我要回答