Lua-Sqlite3获取“rowid”

当我运行这段代码时:

row = db:first_row("SELECT MIN(rowid) from table")
local minID = row.rowid

row = db:first_row("SELECT MAX(rowid) from table")
local maxID = row.rowid

我会收到以下错误:

Runtime error: ...\db_test\main.lua:33: attempt to call method 'first_row' (a nil value)
stack traceback:
    [C]: in function 'first_row'
    ...\main.lua:33: in main chunk

在同一数据库上,这个精确的SQL查询在Python中是有效的。

sqlite文档中可以得知:

“ROWIDs和INTEGER PRIMARY KEY

每个SQLite表的每一行都有一个64位有符号整数密钥,用于唯一标识其表内的行。这个整数通常称为“rowid”。可以使用“rowid”,“oid”或“_rowid_”这三个特殊的独立于大小写的名称来访问rowid值,而不使用列名称。”

对于感兴趣的人,我的情况下工作的代码是:

local minId
local maxId
for row in db:nrows("SELECT MIN(rowid) AS `rowmin` FROM " .. table) do
    minId = row.rowmin
end
for row in db:nrows("SELECT MAX(rowid) AS `rowmax` FROM " .. table) do
    maxId = row.rowmax
end
点赞
用户1190388
用户1190388

如果你使用lua-sqlite3包装器,你需要使用db:rows()方法进行迭代,而不是first_row。调用的代码将是:

row = db:rows("SELECT MIN(rowid) AS `rowmin`, MAX(rowid) AS `rowmax` FROM table")
local minID, maxID = row.rowmin, row.rowmax

基于@CL在评论中的建议:

row = db:rows("SELECT MIN(rowid) AS `rowmin` FROM table")
local minID = row.rowmin
row = db:rows("SELECT MAX(rowid) AS `rowmax` FROM table")
local maxID = row.rowmax
2013-03-28 10:11:08