如何在INSERT IGNORE上获取rowID

时间:2015-04-18 20:00:51

标签: python mysql

获得以下PK的最佳方法是什么:

self.cursor.execute('INSERT IGNORE INTO table (url, country) VALUES (%s, %s)', (line['url'], line['country']))

换句话说,如果它已经存在,我需要获得那个PK,但是如果它不存在,它将是INSERTing然后获得LAST_INSERT_ID。有没有办法在不进行三次查询的情况下执行此操作?这种模式的最佳方法是什么?

2 个答案:

答案 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]