INSERT INTO...python 中的 NO DUPLICATE KEY 子句检查添加的新行

INSERT INTO...NO DUPLICATE KEY clause in python to check new rows added

我尝试在 python 中使用 INSERT INTO...NO DUPLICATE KEY UPDATE 子句来更新名称为主键的 mysql 记录。如果名称存在,更新记录的年龄列,否则插入:

sql = """INSERT INTO mytable(name, age) \
    VALUES ('Tim',30),('Sam',21),('John','35') \
    ON DUPLICATE KEY UPDATE age=VALUES(age)"""

with db.connection() as conn:
    with conn.cursor as cursor:
        cursor.execute(sql)
        if cursor.rowcount == 0:
            result = 'UPDATE'
        else:
            result = 'INSERT'

我想知道这次执行是否增加了一个或多个新行。但是 cursor.rowcount 对于每次插入和更新都是不正确的。对此有何评论?

我 运行 以前遇到过这个问题,我想知道我的插入是否成功。我的短期解决方案是在插入之前和之后在 table 上调用 count(*) 并比较数字。

我从来没有找到一种方法来确定您对 INSERT IGNORE 和 INSERT ... ON DUPLICATE KEY 使用了哪个操作。

只是为了对之前的答案进行更多说明。

如果插入多行,cursor.rowcount 尤其难以实现您的目标。 原因是 rowcount returns 受影响的行数。

定义如下:

如果该行作为新行插入,则每行的 affected-rows 值为 1,如果更新现有行,则为 2,如果现有行设置为其当前值,则为 0。 (https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html)

因此,要解决您的问题,您需要在插入之前和插入之后执行计数(*)。