Lua - Accesso al Database

Ciao, aspiranti programmatori! Oggi ci imbarcheremo in un viaggio emozionante nel mondo dell'accesso ai database utilizzando Lua. Come il tuo amico insegnante di scienze informatiche del quartiere, sono qui per guidarti in questa avventura passo per passo. Non preoccuparti se sei nuovo alla programmazione - inizieremo dalle basi e ci muoveremo verso l'alto. Allora, indossa il tuo casco virtuale e immergiamoci nei dati!

Lua - Database Access

Configurazione del Database MySQL

Prima di iniziare a giocare con i database in Lua, dobbiamo preparare il nostro campo di gioco. Immagina di stanno preparando la tua cucina prima di cucinare un delizioso pasto. Nel nostro caso, useremo MySQL come sistema di gestione del database.

  1. Prima di tutto, assicurati di avere MySQL installato sul tuo computer. Se non lo hai, vai sul sito di MySQL e scarica la versione appropriata per il tuo sistema operativo.

  2. Una volta installato, crea un nuovo database per i nostri esperimenti. Puoi farlo utilizzando la riga di comando di MySQL o uno strumento grafico come MySQL Workbench.

CREATE DATABASE lua_test;

Ottimo! Ora abbiamo il nostro sandbox pronto per la magia di Lua.

Importazione di MySQL

Per utilizzare MySQL con Lua, abbiamo bisogno di uno strumento speciale chiamato LuaSQL. È come un traduttore che aiuta Lua a comunicare con MySQL. Importiamolo:

local luasql = require "luasql.mysql"

Questa riga è come dire a Lua: "Ehi, avremo bisogno delle tue abilità MySQL per questa attività!"

Configurazione della Connessione

Ora che abbiamo introdotto Lua a MySQL, stabiliamo una connessione. È come comporre un numero di telefono per raggiungere il nostro database:

local env = luasql.mysql()
local con = env:connect("lua_test", "username", "password", "localhost", 3306)

Ecco cosa sta succedendo:

  • Creiamo un ambiente (env) per MySQL.
  • Utilizziamo questo ambiente per connetterci al nostro database, fornendo il nome del database, il nome utente, la password, l'host e la porta.

Funzione di Esecuzione

La funzione di esecuzione è il nostro modo di inviare comandi al database. È come un cameriere che prende il nostro ordine in un ristorante:

function execute(con, sql)
local cur = con:execute(sql)
if cur then
return cur:fetch()
end
return nil
end

Questa funzione prende la nostra connessione e un comando SQL, lo esegue e restituisce il risultato.

Esempio di Creazione di Tabella

Creiamo la nostra prima tabella! Immagina di costruire un sistema di biblioteca semplice:

local sql = [[
CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
author VARCHAR(50),
year INT
)
]]
execute(con, sql)

Questo crea una tabella chiamata 'books' con le colonne id, title, author e year.

Esempio di Dichiarazione di Inserimento

Ora, aggiungiamo alcuni libri alla nostra biblioteca:

local sql = [[
INSERT INTO books (title, author, year)
VALUES ('The Lua Programming Language', 'Roberto Ierusalimschy', 2016)
]]
execute(con, sql)

Questo aggiunge un libro alla nostra tabella. È come compilare una scheda della biblioteca per un nuovo libro.

Esempio di Dichiarazione di Aggiornamento

Ops! Abbiamo fatto un errore. Aggiorniamo l'anno del nostro libro:

local sql = [[
UPDATE books
SET year = 2017
WHERE title = 'The Lua Programming Language'
]]
execute(con, sql)

Questo corregge l'anno di pubblicazione del nostro libro.

Esempio di Dichiarazione di Eliminazione

Eliminiamo un libro dalla nostra biblioteca:

local sql = [[
DELETE FROM books
WHERE title = 'The Lua Programming Language'
]]
execute(con, sql)

Questo rimuove il libro specificato dalla nostra tabella.

Esempio di Dichiarazione di Selezione

Ora, vediamo quali libri abbiamo nella nostra biblioteca:

local sql = "SELECT * FROM books"
local cur = con:execute(sql)
local row = cur:fetch({}, "a")
while row do
print(string.format("%s by %s (%d)", row.title, row.author, row.year))
row = cur:fetch(row, "a")
end

Questo recupera tutti i libri e stampa i loro dettagli.

Esempio Completo

Mettiamo tutto insieme in un esempio completo:

local luasql = require "luasql.mysql"

local env = luasql.mysql()
local con = env:connect("lua_test", "username", "password", "localhost", 3306)

function execute(con, sql)
local cur = con:execute(sql)
if cur then
return cur:fetch()
end
return nil
end

-- Crea tabella
execute(con, [[
CREATE TABLE IF NOT EXISTS books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
author VARCHAR(50),
year INT
)
]])

-- Inserisci un libro
execute(con, [[
INSERT INTO books (title, author, year)
VALUES ('The Lua Programming Language', 'Roberto Ierusalimschy', 2017)
]])

-- Seleziona e stampa tutti i libri
local cur = con:execute("SELECT * FROM books")
local row = cur:fetch({}, "a")
while row do
print(string.format("%s by %s (%d)", row.title, row.author, row.year))
row = cur:fetch(row, "a")
end

con:close()
env:close()

Questo script crea una tabella, inserisce un libro e poi stampa tutti i libri nella tabella.

Esecuzione delle Transazioni

Le transazioni sono come bolle protettive intorno a una serie di operazioni sul database. garantiscono che tutte le operazioni siano eseguite con successo o che nessuna di esse venga eseguita. È un approccio "tutto o niente".

Inizio della Transazione

Per iniziare una transazione:

con:execute("START TRANSACTION")

Transazione di Rollback

Se qualcosa va storto, possiamo annullare tutte le modifiche:

con:execute("ROLLBACK")

Transazione di Commit

Se tutto va bene, possiamo salvare tutte le modifiche:

con:execute("COMMIT")

Importazione di SQLite

SQLite è un altro sistema di database popolare, specialmente per le applicazioni più piccole. Vediamo come usarlo con Lua:

local luasql = require "luasql.sqlite3"

Configurazione della Connessione

La connessione a SQLite è leggermente diversa da MySQL:

local env = luasql.sqlite3()
local con = env:connect("test.db")

Questo crea o apre un file chiamato "test.db" come il nostro database.

Funzione di Esecuzione

La funzione di esecuzione per SQLite è simile a quella di MySQL:

function execute(con, sql)
local cur = con:execute(sql)
if cur then
return cur:fetch()
end
return nil
end

Esempio di Creazione di Tabella

Creiamo una tabella semplice in SQLite:

local sql = [[
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
]]
execute(con, sql)

Esempio di Dichiarazione di Inserimento

Ora, aggiungiamo un utente:

local sql = [[
INSERT INTO users (name, age)
VALUES ('Alice', 30)
]]
execute(con, sql)

Esempio di Dichiarazione di Selezione

Vediamo i nostri utenti:

local sql = "SELECT * FROM users"
local cur = con:execute(sql)
local row = cur:fetch({}, "a")
while row do
print(string.format("%s is %d years old", row.name, row.age))
row = cur:fetch(row, "a")
end

Esempio Completo

Ecco un esempio completo utilizzando SQLite:

local luasql = require "luasql.sqlite3"

local env = luasql.sqlite3()
local con = env:connect("test.db")

function execute(con, sql)
local cur = con:execute(sql)
if cur then
return cur:fetch()
end
return nil
end

-- Crea tabella
execute(con, [[
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
]])

-- Inserisci un utente
execute(con, [[
INSERT INTO users (name, age)
VALUES ('Alice', 30)
]])

-- Seleziona e stampa tutti gli utenti
local cur = con:execute("SELECT * FROM users")
local row = cur:fetch({}, "a")
while row do
print(string.format("%s is %d years old", row.name, row.age))
row = cur:fetch(row, "a")
end

con:close()
env:close()

Questo script crea una tabella, inserisce un utente e poi stampa tutti gli utenti nella tabella.

Ecco fatto, ragazzi! Avete appena fatto i vostri primi passi nel mondo dell'accesso ai database con Lua. Ricorda, la pratica fa la perfezione, quindi non aver paura di sperimentare con questi esempi. Chi lo sa, potresti creare la prossima grande applicazione basata su database! Buon coding!

Credits: Image by storyset