我正在使用MySql和python MySQLdb模块。我想插入一个新行,或者如果该行已经存在,则更新某些字段。
包含要输入的值的元组列表如下所示;
ListTuple=[('A_val', 'B_val', 'C_val', 'D_val', 'C_val'), ('AA_val', 'BB_val', 'CC_val', 'DD_val', 'CC_val')]
MySQL查询看起来像这样;
query="""INSERT INTO table (A, B, C, D)
VALUES (%s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
C= %s
"""
try:
Cursor.executemany(query, ListTuple)
Db_conn.commit()
except:
Db_conn.rollback()
使用此代码执行查询失败。有人可以指出它有什么问题吗?非常感谢你的帮助。
答案 0 :(得分:2)
试试这个:
query="""INSERT INTO table (A, B, C, D)
VALUES (%s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
C= VALUES(C)
"""
您的查询有5个占位符,但您的元组只有4个值。您需要复制C
,但VALUES(C)
选项会自动从原始VALUES子句中获取该值。