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 tabell
  • INSERT INTO – lägg till data
  • SELECT – hämta data
  • UPDATE – ändra befintlig data
  • DELETE – 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 sqlite3

Sedan 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", 22 skickas 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

OperationSQL-satsFörklaring
CreateINSERT INTOLägg till en ny post
ReadSELECTHämta data
UpdateUPDATE ... SETÄndra befintlig post
DeleteDELETE FROMTa 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

EgenskapTextfil (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