如何在MySQL Python中进行upsert(更新和插入)查询?

时间:2015-02-18 03:41:20

标签: python mysql sql mysql-python

我正在寻找一个简单的upsert(更新/插入)。

我有一个表,我在其中为books表插入行,但下次当我想插入行时,我不想再次插入该表的数据只是想要更新所需的列,如果它退出那里,如果没有那么创建新行。

我如何在Mysql-python中执行此操作?

cursor.execute("""INSERT INTO books (book_code,book_name,created_at,updated_at) VALUES (%s,%s,%s,%s)""", (book_code,book_name,curr_time,curr_time,))

1 个答案:

答案 0 :(得分:4)

MySQL有REPLACE 声明:

  

REPLACE的工作原理与INSERT完全相同,只是如果有一个旧行   table与PRIMARY KEYUNIQUE的新行具有相同的值   index,在插入新行之前删除旧行。

cursor.execute("""
    REPLACE INTO books (book_code,book_name,created_at,updated_at)
    VALUES (%s,%s,%s,%s)""",
    (book_code,book_name,curr_time,curr_time,)
)

更新根据@ Yo-han的评论,REPLACEDELETEINSERT相似,而不是UPSERT。以下是使用INSERT ... ON DUPLICATE KEY UPDATE的替代方法:

cursor.execute("""
    INSERT INTO books (book_code,book_name,created_at,updated_at)
    VALUES (%s,%s,%s,%s)
    ON DUPLICATE KEY UPDATE book_name=%s, created_at=%s, updated_at=%s
""", (book_code, book_name, curr_time, curr_time, book_name, curr_time, curr_time))