MrFaws Docs
Lær Python

Databaser

Lær SQLite, SQL, parameteriserede queries, transactions og repository pattern.

SQLite følger med Python og er perfekt til lokale værktøjer og mindre applikationer.

Opret en database

import sqlite3

connection = sqlite3.connect("app.db")
connection.row_factory = sqlite3.Row

connection.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        email TEXT NOT NULL UNIQUE
    )
""")
connection.commit()

Parameteriser altid queries

name = "Ada"
email = "ada@example.com"

with connection:
    connection.execute(
        "INSERT INTO users (name, email) VALUES (?, ?)",
        (name, email),
    )

Sæt aldrig input direkte ind i en SQL-string. Placeholders beskytter mod SQL injection og håndterer escaping korrekt.

Læs rækker

rows = connection.execute(
    "SELECT id, name, email FROM users ORDER BY name"
).fetchall()

for row in rows:
    print(row["id"], row["name"])

Transactions

En transaction samler flere ændringer, så enten lykkes alle eller ingen. Det er afgørende ved eksempelvis overførsel af credits mellem to brugere.

Repository pattern

Læg SQL i en repository-class og hold forretningslogik i services. Så kan queries testes separat, og resten af programmet afhænger ikke direkte af SQLite.

Migrationer og produktion

Når schemaet udvikler sig, skal ændringer versionsstyres som migrationer. Til større websystemer bruges ofte PostgreSQL og et værktøj som SQLAlchemy eller psycopg.

Øvelse

Lav en SQLite-baseret task manager med create, list, complete og delete. Pak hver ændring i en transaction, og test at en ukendt task giver en kontrolleret fejl.

On this page