2011-10-12 53 views
1

我使用原始SQL插入一行,并需要获取新插入行的主键。我不能假定任何非PK插入的数据都是唯一的,也不能假定该行是最后插入的行。Python/sqlite:获取新插入行的PK

如果使用原始SQL不可行,那么使用“常规”插入操作如何?我在想,我将不得不完全创建一个新的customID字段。然后我会创建一个随机数字变量并将其作为唯一ID插入。自从我插入它后,我知道它是什么。但是这似乎破坏了将PK作为唯一标识符的目的。有没有办法拉取序列的下一个ID(如在Oracle中)?

insert_sql = "insert into my_table(title, text) values ('the title', 'the text')" 

cursor = connection.cursor() 
cursor.execute(insert_sql) 
transaction.commit_unless_managed() 

回答

3

... nor can I assume that the row is the last inserted row.

在全球范围内,你不能假设的。但与您的连接有关,您可以 - 因此您可以使用SELECT LAST_INSERT_ID()或仅使用cursor.connection.insert_id()。甚至可能是cursor.lastrowid,但我不确定它是否会起作用。

+1

谢谢! cursor.lastrowid工作得很好。它是本地的。 cursor.connection.insert_id()给了我一个错误:'sqlite3.Connection'对象没有'insert_id'属性 – user984003

+0

Ouch,'sqlite3'。我没有意识到这一点,想到MySQL ... – glglgl