如何将一行插入一个表并将该行生成的id用于另一行,以便可以围绕整个事务进行事务处理? 我遇到的问题是存在大量的db延迟,因为我有100k记录,但我一次只能处理1-100。
INSERT INTO foo;
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT INTO foo;
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
答案 0 :(得分:1)
插入foo
记录后,使用sqlite3_last_insert_rowid(或数据库包装器使用的任何内容)读取其ID,并在以下所有bar
插入语句中使用该值:< / p>
db.execute("BEGIN TRANSACTION")
db.execute("INSERT INTO foo ...")
foo_id = db.last_insert_rowid
db.execute("INSERT INTO bar(foo_id) VALUES (?)", [foo_id])
...
db.execute("COMMIT TRANSACTION")
答案 1 :(得分:0)
使用last_insert_rowid()
功能。