获得以下PK的最佳方法是什么:
self.cursor.execute('INSERT IGNORE INTO table (url, country) VALUES (%s, %s)', (line['url'], line['country']))
换句话说,如果它已经存在,我需要获得那个PK,但是如果它不存在,它将是INSERTing然后获得LAST_INSERT_ID
。有没有办法在不进行三次查询的情况下执行此操作?这种模式的最佳方法是什么?
答案 0 :(得分:2)
要在插入数据时获取LAST_INSERT_ID
,请不要使用INSERT IGNORE
。相反,使用ON DUPLICATE KEY UPDATE
子句获取id:
INSERT INTO table (url, country)
VALUES (%s, %s)
ON DUPLICATE KEY
UPDATE
id = LAST_INSERT_ID(id);
其中id
代表表格的唯一列。
您现在还需要另一个查询来获取更新的LAST_INSERT_ID
。
答案 1 :(得分:0)
我认为在不改变以前的数据的情况下,最简单的方法是执行INSERT IGNORE
后跟SELECT
来检索id
。
cursor.execute('INSERT IGNORE INTO...')
cursor,execute('SELECT id FROM table...')
id = cursor.fetchone()[0]