0

当我运行代码时:

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 文档

"ROWID 和整数主键

每个 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
4

1 回答 1

1

如果您使用的是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-28T10:11:08.463 回答