Existem algumas bibliotecas para acessar banco de dados com Lua, mas apenas LuaSQL fornece acesso uniforme a diferentes bancos de dados.
Aqui está um exemplo simples de como usar o LuaSQL:
-- Initialization (1)
require"luasql.postgres"
local env = luasql.postgres ()
local conn = assert (env:connect ("lpg"))
-- Building SQL statement (2)
course_list = { "Music", "Literature", }
for i, course in ipairs (course_list) do
course_list[i] = "'"..course.."'"
end
local c_list = table.concat (course_list, ",")
local stmt = [=[
select a.id, a.name
from alumn a inner join course c on (a.course_id = c.id)
where c.name in (]=]..c_list..")"
-- SQL execution and error handling (3)
local cur, err = conn:execute (stmt)
if not cur then
error (err.." SQL = [=["..stmt.."]=]")
end
-- Iteration loop (4)
local id, name = cur:fetch ()
while id do
cgilua.put (string.format ("<tr><td>id = %%s<td>name = %%s</tr>", id, name))
id, name = cur:fetch ()
end
No entanto, seria melhor definir um iterator para usar dentro de uma página Lua:
function lines (stmt)
local cur = assert (conn:execute(stmt))
return function ()
return cur:fetch()
end
end
<table>
<%% for id, name in lines"select id, name from alumn" do %%>
<tr>
<td><%%= id %%>
<td><%%= name %%>
</tr>
<%% end %%>
</table>