【发布时间】:2010-10-05 08:08:16
【问题描述】:
我在 python 中使用 sqlite。当我插入表 A 时,我需要从表 B 中为其提供一个 ID。所以我想做的是将默认数据插入 B,获取 id(这是自动递增的)并在表 A 中使用它。什么是最好的方法从我刚刚插入的表中接收密钥?
【问题讨论】:
我在 python 中使用 sqlite。当我插入表 A 时,我需要从表 B 中为其提供一个 ID。所以我想做的是将默认数据插入 B,获取 id(这是自动递增的)并在表 A 中使用它。什么是最好的方法从我刚刚插入的表中接收密钥?
【问题讨论】:
正如 Christian 所说,sqlite3_last_insert_rowid() 是您想要的……但那是 C 级 API,而您正在使用 SQLite 的 Python DB-API 绑定。
看起来光标方法lastrowid 会做你想要的(search for 'lastrowid' in the documentation for more information)。使用cursor.execute( ... ) 插入您的行,然后执行lastid = cursor.lastrowid 之类的操作来检查最后插入的ID。
你说你需要“一个”ID 让我很担心,不过……你拥有哪个 ID 并不重要?除非您将刚刚插入 B 的数据用于某事,在这种情况下您需要 那个 行 ID,如果您只需要表 B 的任何旧行 ID,那么您的数据库结构就会严重搞砸。
【讨论】:
INSERT... RETURNING 等功能。
查看sqlite3_last_insert_rowid()——这可能就是您要找的东西:
SQLite 表中的每个条目都有一个 唯一的 64 位有符号整数密钥 称为“rowid”。 rowid 是 始终以未声明的形式提供 名为 ROWID、OID 或 _ROWID_ 的列 只要不使用这些名称 通过显式声明的列。如果 表有一个 INTEGER 类型的列 PRIMARY KEY 那么该列是 rowid 的另一个别名。
此例程返回 最近成功的 INSERT 到 从数据库连接数据库 在第一个论点中。如果不 曾经发生过成功的 INSERT 在该数据库连接上,零是 返回。
【讨论】:
简单使用:
SELECT last_insert_rowid();
但是,如果您有多个连接写入数据库,您可能无法取回您期望的密钥。
【讨论】: