Programmering nivå 2

Kap 4.6 – Använda SQLite-databaser

Skapa en databasfil, tabeller och SQL-frågor direkt från Python.

Mål med lektionen

När du har arbetat klart med denna lektion ska du:

  • Förstå vad en relationsdatabas är och hur SQLite fungerar.
  • Kunna skapa en databas och en tabell i Python med sqlite3.
  • Kunna lägga till, hämta och visa data från en databas.
  • Kunna använda SQL-frågor direkt i Pythonkod.

Så här lär du dig bäst

Du lär dig bäst genom att bygga ett enkelt system där du först skapar en databasfil, definierar en tabell och sedan utför några grundläggande operationer: lägg till, hämta och visa data. Börja med hårdkodad data och utveckla det till att ta in data från användaren. Jämför gärna med hur du tidigare lagrade information i textfiler.

Centrala begrepp

  • SQLite - En lätt, filbaserad databas utan server, perfekt för små projekt.
  • SQL - Ett språk för att prata med databaser, Structured Query Language.
  • sqlite3 - Inbyggt bibliotek i Python för att arbeta med SQLite-databaser.
  • CRUD - Create, Read, Update, Delete: vanliga operationer i databashantering.

Innehåll och exempel

Skapa databas och tabell

import sqlite3

conn = sqlite3.connect("recept.db")
cursor = conn.cursor()

cursor.execute("""
CREATE TABLE IF NOT EXISTS recept (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    namn TEXT NOT NULL,
    ingredienser TEXT
)
""")

conn.commit()
conn.close()

sqlite3.connect("recept.db") skapar databasfilen om den inte redan finns. CREATE TABLE IF NOT EXISTS gör att tabellen skapas första gången programmet körs, men inte skapas om ifall den redan finns.

För att kunna titta på databasen direkt i VS Code kan du installera tillägget SQLite Viewer av publisher Florian Klampfer. När programmet har skapat filen recept.db kan du öppna den i VS Code och se tabellerna och raderna visuellt.

Lägga till data

conn = sqlite3.connect("recept.db")
cursor = conn.cursor()

namn = "Pannkakor"
ingredienser = "mjölk, mjöl, ägg"

cursor.execute(
    "INSERT INTO recept (namn, ingredienser) VALUES (?, ?)",
    (namn, ingredienser)
)

conn.commit()
conn.close()

Frågetecknen i SQL-frågan är platshållare. Värdena skickas in separat i en tuple. Det gör koden tydligare och säkrare än att bygga SQL-frågan genom att klistra ihop textsträngar.

Hämta och visa data

conn = sqlite3.connect("recept.db")
cursor = conn.cursor()

cursor.execute("SELECT * FROM recept")
rader = cursor.fetchall()

for rad in rader:
    print(f"Recept: {rad[1]}")
    print(f"Ingredienser: {rad[2]}")

conn.close()

SELECT * FROM recept hämtar alla rader från tabellen. Med fetchall() får du tillbaka raderna så att du kan loopa igenom dem i Python.

Öva - Gör ett mini-receptregister

  1. Skapa ett Pythonprogram med tre funktioner: lägg till ett recept, visa alla recept och avsluta programmet.
  2. Använd SQLite för att spara recepten i en databas.
  3. Skapa en meny i konsolen för att välja funktion.

Komplett kodexempel

import sqlite3

DB_NAMN = "recept.db"

def skapa_databas_och_tabell():
    conn = sqlite3.connect(DB_NAMN)
    cursor = conn.cursor()
    cursor.execute("""
    CREATE TABLE IF NOT EXISTS recept (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        namn TEXT NOT NULL,
        ingredienser TEXT
    )
    """)
    conn.commit()
    conn.close()

def lägg_till_recept(namn, ingredienser):
    conn = sqlite3.connect(DB_NAMN)
    cursor = conn.cursor()
    cursor.execute(
        "INSERT INTO recept (namn, ingredienser) VALUES (?, ?)",
        (namn, ingredienser)
    )
    conn.commit()
    conn.close()
    print(f"Receptet '{namn}' har lagts till.")

def visa_alla_recept():
    conn = sqlite3.connect(DB_NAMN)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM recept")
    rader = cursor.fetchall()

    if not rader:
        print("Inga recept hittades.")
    else:
        for rad in rader:
            print(f"\nRecept: {rad[1]}")
            print(f"Ingredienser: {rad[2]}")

    conn.close()

def main():
    skapa_databas_och_tabell()

    while True:
        print("\nMeny:")
        print("1. Lägg till recept")
        print("2. Visa alla recept")
        print("3. Avsluta")

        val = input("Välj: ")

        if val == "1":
            namn = input("Receptets namn: ")
            ingredienser = input("Ange ingredienser (kommaseparerade): ")
            lägg_till_recept(namn, ingredienser)
        elif val == "2":
            visa_alla_recept()
        elif val == "3":
            print("Avslutar programmet.")
            break
        else:
            print("Ogiltigt val. Försök igen.")

if __name__ == "__main__":
    main()

Sammanfattning

  • Du kan nu skapa och använda SQLite-databaser i Python.
  • Du har använt SQL för att skapa tabeller, lägga till och läsa data.
  • Du har byggt ett strukturerat program som lagrar information i en riktig databasfil.

Tillbaka till Kapitel 4