Exemplos
Abaixo, você verá um pequeno exemplo do código do uso básico da biblioteca. Em seguida, outro exemplo mostra como criar um iterador sobre o resultado de uma determinada consulta.
Uso básico
-- carregar o driver require "luasql.postgres" -- criar o objeto de ambiente env = assert (luasql.postgres()) -- conectar a base de dados con = assert (env:connect("luasql-test")) -- retornar a tabela res = con:execute"DROP TABLE people" res = assert (con:execute[[ CREATE TABLE people ( name varchar(50), email varchar(50) ) ]]) -- adiciona alguns elementos list = { { name="José das Couves", email="jose@couves.com", }, { name="Manoel Joaquim", email="manoel.joaquim@cafundo.com", }, { name="Maria das Dores", email="maria@dores.com", }, } for i, p in pairs (list) do res = assert (con:execute(string.format([[ INSERT INTO people VALUES ('%s', '%s')]], p.name, p.email) )) end -- obtem um cursor cur = assert (con:execute"SELECT name, email from people") -- imprime todos os registros, indexados pelos nomes de campos row = cur:fetch ({}, "a") while row do print(string.format("Nome: %s, E-mail: %s", row.name, row.email)) -- reutiliza a tabela de resultados row = cur:fetch (row, "a") end -- fecha tudo cur:close() con:close() env:close()
O resultado desse script será:
Nome: José das Couves, E-mail: jose@couves.com Nome: Manoel Joaquim, E-mail: manoel.joaquim@cafundo.com Nome: Maria das Dores, E-mail: maria@dores.com
Uso do iterador
Pode ser útil oferecer um iterador para cada registro do resultado:
function rows (connection, sql_statement) local cursor = assert (connection:execute (sql_statement)) return function () return cursor:fetch() end end
Esse iterador é usado da seguinte forma:
require "luasql.mysql" env = assert (luasql.mysql()) con = assert (env:connect"my_db") for id, name, address in rows (con, "select * from contacts") do print (string.format ("%s: %s", name, address)) end
Obviamente, o código acima só funciona se houver uma tabela chamadas contacts
com as colunas apropriadas.
No final do loop o objeto cursor será automaticamente fechado pelo driver, já que todo o resultado foi recuperado.
Objetos to-be-closed
Nota de Compatibilidade: Variáveis To-be-closed é um recurso introduzido na versão 5.4 de Lua. Portanto, essa funcionalidade só pode ser usada se o driver LuaSQL (versão > 2.6) for compilado para a versão 5.4 ou superior de Lua.
function getName(db, id) -- Este código requer Lua 5.4 ou superior devido ao uso de variáveis to-be-closed local cur <close> = db:execute("SELECT name FROM contacts WHERE id = " .. id) return cur:fetch() end