Databaser och SQLite
Vad är en databas?
En databas är ett system för att spara och organisera information på ett strukturerat sätt, så att man enkelt kan lägga till, hämta, söka, ändra och ta bort information.
Tänk dig en databas som en samling kalkylblad (tabeller), där varje tabell har:
- kolumner (t.ex.
namn,klass,ålder) och - rader (t.ex. varje elev).
Databasen håller ordning på all data och gör det möjligt att snabbt arbeta med den – oavsett om det är 5 eller 500 000 rader!
Varför använda en databas?
I tidigare moment har vi lagrat data i textfiler, JSON och CSV, vilket fungerar för enklare program. Men när programmet växer eller datan blir mer komplex, blir det snabbt rörigt att:
- söka efter en viss post,
- uppdatera ett enda värde,
- hålla datan konsekvent och organiserad.
Databaser löser detta genom att erbjuda:
- ett säkert, snabbt och organiserat sätt att hantera data,
- ett eget språk (SQL) för att kommunicera med datan,
- möjlighet att koppla flera typer av information ihop (t.ex. elever → kurser → betyg).
Vad är SQLite?
SQLite är en inbyggd databas i Python – du behöver inte installera något extra.
- Den sparar all data i en enda lokal fil (t.ex.
elevdata.db). - Den är perfekt för mindre projekt, övningar och appar.
- Du behöver inte logga in med användarnamn eller lösenord.
- All kommunikation med databasen sker via SQL-språk (Structured Query Language).
SQLite används i tusentals program och appar, till exempel:
- webbläsare (Firefox)
- mobilappar (iOS och Android)
- små spel och verktyg
Vad är SQL?
SQL är ett språk för att hantera data i en databas.
Exempel:
CREATE TABLE– skapa en tabellINSERT INTO– lägg till dataSELECT– hämta dataUPDATE– ändra befintlig dataDELETE– ta bort data
Du behöver inte lära dig hela SQL – bara grunderna för att skapa, läsa, ändra och ta bort data (det kallas CRUD – se längre ner).
Kom igång med SQLite i Python
Först importerar vi modulen:
import sqlite3Sedan skapar vi en anslutning till databasen:
connection = sqlite3.connect("school.db")Från anslutningen skapar vi en cursor, som används för att skicka kommandon:
cursor = connection.cursor()Skapa en tabell
cursor.execute("""
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
""")Förklaring:
- Tripla citattecken ””” används för att skriva kommandon på flera rader.
CREATE TABLE= skapa en ny tabell i databasen.IF NOT EXISTS= undvik fel om tabellen redan finns.id= ett unikt ID för varje rad (post).PRIMARY KEY= varje rad måste ha ett unikt ID.AUTOINCREMENT= varje gång du lägger till en ny rad får den automatiskt nästa lediga ID (1, 2, 3…).name TEXT= en textsträng (t.ex. namn).age INTEGER= ett heltal (t.ex. ålder).
Lägga till (INSERT):
cursor.execute("INSERT INTO students (name, age) VALUES (?, ?)", ("Alice", 22))?är en platshållare – det skyddar mot fel och attacker."Alice", 22skickas in som en tuple.
Läsa data (SELECT):
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for row in rows:
print(row)SELECT *betyder “hämta alla kolumner”.fetchall()returnerar alla rader som en lista av tuples.
Ändra data (UPDATE):
cursor.execute("UPDATE students SET age = ? WHERE name = ?", (23, "Alice"))- Ändrar åldern för raden där namnet är “Alice”.
Ta bort data (DELETE):
cursor.execute("DELETE FROM students WHERE id = ?", (1,))- Tar bort raden med ID 1.
CRUD – Fyra viktiga operationer
| Operation | SQL-sats | Förklaring |
|---|---|---|
| Create | INSERT INTO | Lägg till en ny post |
| Read | SELECT | Hämta data |
| Update | UPDATE ... SET | Ändra befintlig post |
| Delete | DELETE FROM | Ta bort post |
Glöm inte commit & close
När du ändrar något i databasen måste du spara ändringarna:
connection.commit()När du är klar ska du stänga anslutningen:
connection.close()Om användarnamn och lösenord
De flesta databaser (t.ex. MySQL, PostgreSQL) kräver användarnamn och lösenord för att skydda datan. Då loggar man in med:
connect(user="admin", password="secret", ...)SQLite är däremot lokal och enkel – den sparar allt i en fil och har ingen inloggning. Det gör det lättare för nybörjare och passar bra för oss just nu.
Jämförelse: Textfil vs Databas
| Egenskap | Textfil (CSV/JSON) | Databas (SQLite) |
|---|---|---|
| Spara enkel data | ✅ | ✅ |
| Söka i stora mängder | 🔴 kräver kod | ✅ inbyggt i SQL |
| Uppdatera en rad | 🔴 läsa → ändra → spara | ✅ direkt |
| Struktur på datan | 🔴 manuell | ✅ tabellstruktur |
| Lagrar flera tabeller | 🔴 svårt | ✅ enkelt |
| Inbyggd i Python | ✅ | ✅ |