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)
因此,要解决您的问题,您需要在插入之前和插入之后执行计数(*)。
我尝试在 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)
因此,要解决您的问题,您需要在插入之前和插入之后执行计数(*)。