Lua - Datenbankzugriff

Hallo, angehende Programmierer! Heute machen wir uns auf eine aufregende Reise in die Welt des Datenbankzugriffs mit Lua. Als Ihr freundlicher Nachbarschaftsinformatiklehrer bin ich hier, um Sie Schritt für Schritt durch dieses Abenteuer zu führen. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind - wir beginnen bei den Grundlagen und arbeiten uns hinauf. Also, schnallen Sie sich an und tauchen wir in einige Daten ein!

Lua - Database Access

MySQL-Datenbank einrichten

Bevor wir mit Datenbanken in Lua spielen können, müssen wir unseren Spielplatz vorbereiten. Stellen Sie es sich wie das Vorbereiten Ihrer Küche vor, bevor Sie ein köstliches Gericht kochen. In unserem Fall verwenden wir MySQL als Datenbankverwaltungssystem.

  1. Stellen Sie sicher, dass MySQL auf Ihrem Computer installiert ist. Wenn nicht, besuchen Sie die MySQL-Website und laden Sie die appropriate Version für Ihr Betriebssystem herunter.

  2. Once installed, create a new database for our experiments. You can do this using the MySQL command line or a graphical tool like MySQL Workbench.

CREATE DATABASE lua_test;

Großartig! Jetzt ist unser Sandkasten bereit für ein bisschen Lua-Zauber.

MySQL importieren

Um MySQL mit Lua zu verwenden, benötigen wir ein spezielles Werkzeug namens LuaSQL. Es ist wie ein Übersetzer, der Lua hilft, mit MySQL zu kommunizieren. Lassen Sie uns importieren:

local luasql = require "luasql.mysql"

Diese Zeile ist so, als würde Lua sagen: "Hey, wir brauchen deine MySQL-Fähigkeiten für diese Aufgabe!"

Verbindung einrichten

Seit wir Lua an MySQL herangeführt haben, lassen Sie uns eine Verbindung herstellen. Es ist wie das Wählen einer Telefonnummer, um unsere Datenbank zu erreichen:

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

Hier passiert folgendes:

  • Wir erstellen eine Umgebung (env) für MySQL.
  • Wir verwenden diese Umgebung, um eine Verbindung zu unserer Datenbank herzustellen, indem wir den Datenbanknamen, den Benutzernamen, das Passwort, den Host und den Port angeben.

Ausführen einer Funktion

Die execute-Funktion ist unsere Möglichkeit, Befehle an die Datenbank zu senden. Es ist wie ein Kellner, der unsere Bestellung im Restaurant aufnimmt:

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

Diese Funktion nimmt unsere Verbindung und einen SQL-Befehl, führt ihn aus und gibt das Ergebnis zurück.

Beispiel für die Erstellung einer Tabelle

Lassen Sie uns unsere erste Tabelle erstellen! Stellen Sie sich vor, wir bauen ein einfaches Bibliothekssystem:

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

Dies erstellt eine Tabelle namens 'books' mit Spalten für id, title, author und year.

Beispiel für einen Einfügebefehl

Jetzt fügen wir einige Bücher in unsere Bibliothek ein:

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

Dies fügt ein Buch in unsere Tabelle ein. Es ist wie das Ausfüllen einer Bibliothekskarte für ein neues Buch.

Beispiel für einen Aktualisierungsbefehl

Ups! Wir haben einen Fehler gemacht. Lassen Sie uns das Jahr unseres Buches aktualisieren:

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

Dies korrigiert das Erscheinungsjahr unseres Buches.

Beispiel für einen Löschbefehl

Lassen Sie uns ein Buch aus unserer Bibliothek entfernen:

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

Dies entfernt das angegebene Buch aus unserer Tabelle.

Beispiel für einen Auswahlabefehl

Jetzt schauen wir uns an, welche Bücher wir in unserer Bibliothek haben:

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

Dies abruft alle Bücher und gibt ihre Details aus.

Ein vollständiges Beispiel

Lassen Sie uns alles in einem vollständigen Beispiel zusammenfassen:

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

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

-- Ein Buch einfügen
execute(con, [[
INSERT INTO books (title, author, year)
VALUES ('The Lua Programming Language', 'Roberto Ierusalimschy', 2017)
]])

-- Alle Bücher ausgeben
local cur = con:execute("SELECT * FROM books")
local row = cur:fetch({}, "a")
while row do
print(string.format("%s von %s (%d)", row.title, row.author, row.year))
row = cur:fetch(row, "a")
end

con:close()
env:close()

Dieses Skript erstellt eine Tabelle, fügt ein Buch ein und gibt dann alle Bücher in der Tabelle aus.

Transaktionen durchführen

Transaktionen sind wie schützende Blasen um eine Reihe von Datenbankoperationen. Sie stellen sicher, dass entweder alle Operationen erfolgreich sind oder keine von ihnen. Es ist eine "alles oder nichts" Herangehensweise.

Transaktion starten

Um eine Transaktion zu starten:

con:execute("START TRANSACTION")

Transaktion rückgängig machen

Wenn etwas falsch läuft, können wir alle Änderungen rückgängig machen:

con:execute("ROLLBACK")

Transaktion bestätigen

Wenn alles gut geht, können wir alle Änderungen speichern:

con:execute("COMMIT")

SQLite importieren

SQLite ist ein weiteres beliebtes Datenbankssystem, insbesondere für kleinere Anwendungen. Sehen wir uns an, wie man es mit Lua verwendet:

local luasql = require "luasql.sqlite3"

Verbindung einrichten

Die Verbindung zu SQLite ist etwas anders als bei MySQL:

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

Dies erstellt oder öffnet eine Datei namens "test.db" als unsere Datenbank.

Ausführen einer Funktion

Die execute-Funktion für SQLite ist ähnlich zu MySQL:

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

Beispiel für die Erstellung einer Tabelle

Lassen Sie uns eine einfache Tabelle in SQLite erstellen:

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

Beispiel für einen Einfügebefehl

Jetzt fügen wir einen Benutzer hinzu:

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

Beispiel für einen Auswahlabefehl

Lassen Sie uns unsere Benutzer abrufen:

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

Ein vollständiges Beispiel

Hier ist ein vollständiges Beispiel, das SQLite verwendet:

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

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

-- Einen Benutzer einfügen
execute(con, [[
INSERT INTO users (name, age)
VALUES ('Alice', 30)
]])

-- Alle Benutzer ausgeben
local cur = con:execute("SELECT * FROM users")
local row = cur:fetch({}, "a")
while row do
print(string.format("%s ist %d Jahre alt", row.name, row.age))
row = cur:fetch(row, "a")
end

con:close()
env:close()

Dieses Skript erstellt eine Tabelle, fügt einen Benutzer ein und gibt dann alle Benutzer in der Tabelle aus.

Und das ist es, Leute! Sie haben gerade Ihre ersten Schritte in die Welt des Datenbankzugriffs mit Lua gemacht. Erinnern Sie sich daran, dass Übung den Meister macht, also experimentieren Sie ruhig mit diesen Beispielen. Wer weiß? Vielleicht erstellen Sie ja die nächste große datenbankgestützte Anwendung! Frohes Programmieren!

Methode Beschreibung
require "luasql.mysql" MySQL-Modul importieren
env:connect() Datenbankverbindung herstellen
con:execute() SQL-Anweisungen ausführen
cur:fetch() Ergebniszeilen abrufen
START TRANSACTION Transaktion starten
ROLLBACK Änderungen in einer Transaktion rückgängig machen
COMMIT Änderungen in einer Transaktion speichern
require "luasql.sqlite3" SQLite-Modul importieren

Credits: Image by storyset