如果存在行,则使用MySQL python模块插入或更新

时间:2014-04-10 03:19:21

标签: python mysql list python-2.7 mysql-python

我正在使用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() 

使用此代码执行查询失败。有人可以指出它有什么问题吗?非常感谢你的帮助。

1 个答案:

答案 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子句中获取该值。