获取刚插入的 id lua-sqlite3

我正在尝试获取刚插入的自增 id:

local luasql = require "luasql.sqlite3"

dbname = "dbname"
table1 = "table1"
table2 = "table2"

env = luasql.sqlite3()
con = env:connect(dbname)

-- 创建 table1
res1 = con:execute(string.format("CREATE TABLE '%s' (" ..
    "id INTEGER PRIMARY KEY AUTOINCREMENT, " ..
    "test1 varchar(32), " ..
    "test2 varchar(32))", con:escape(table1)))

-- 创建 table2
res2 = con:execute(string.format("CREATE TABLE '%s' (" ..
    "id INTEGER PRIMARY KEY AUTOINCREMENT, " ..
    "id_of_row_in_table_1 varchar(32), " ..
    "test2 varchar(32))", con:escape(table2)))

-- 向 table1 插入数据
last_inserted_id = con:execute(string.format("INSERT INTO '%s' ('%s', '%s')", con:escape(table1), 'test1', 'test2', con:escape('1'), con:escape('1')))

print(last_inserted_id) -- 不幸的是这不会返回刚插入的 id

-- 向 table2 插入数据
res = con:execute(string.format("INSERT INTO '%s' ('%s', '%s')", con:escape(table2), 'last_inserted_id', 'test2', con:escape(last_inserted_id), con:escape('1')))

如何获取刚插入的 id?我认为插入函数应该返回刚插入的 id,但它没有。

点赞
用户3735873
用户3735873

你可以这样做(我正在使用lsqlite3,所以请相应调整):

db = sqlite3.open(':memory:')

db:execute [[
create table xxx(xxx);
insert into xxx values('one');
insert into xxx values('two');
insert into xxx values('three');
]]

sql = [[select last_insert_rowid() as num;]]
for ans in db:nrows(sql) do
  print(ans.num)
end
2016-03-14 23:53:49