Presentationer Slide 1/1

Kap 5.2

Projektarbete med databas

Bygg grunden till ett eget projekt som lagrar och söker information i SQLite.

Mål

Efter lektionen ska du kunna...

  • strukturera ett eget databasprojekt
  • dela upp projektet i moduler
  • skapa tabell, lägga till, visa och söka data
  • koppla databasen till en meny
  • testa projektet stegvis

Från plan till kod

Nu börjar projektarbetet

I kapitel 5.1 planerade du syfte, krav och MVP.

Nu bygger du projektets första fungerande version.

Börja med databasen och de viktigaste funktionerna, inte extrafunktionerna.

Projektkrav

Detta måste finnas

  • en meny i konsolen
  • en SQLite-databas med minst en tabell
  • funktioner som lägger till och visar data
  • en sökfunktion med SQL
  • minst två Pythonmoduler
  • felhantering med try/except

Välj idé

Data som passar i en tabell

  • Bokregister: titel och författare.
  • Receptplanerare: namn och ingredienser.
  • Elevregister: namn och poäng.
  • Filmregister: titel och kategori.

Välj en idé där du kan lägga till, visa och söka poster.

Planera tabellen

Generiskt exempel: poster

id | namn                  | info
1  | Bröderna Lejonhjärta | Bok i registret
2  | Utvandrarna           | Bok i registret

id identifierar raden.

namn och info kan anpassas till projektidén.

Projektstruktur

Dela upp ansvaret

databasprojekt/
├── main.py
├── databas.py
└── poster.db

main.py hanterar meny och användarinmatning.

databas.py hanterar anslutning och SQL.

CRUD

Bygg grunden först

  • Create: lägg till en post.
  • Read: visa och sök poster.
  • Update: ändra en post.
  • Delete: ta bort en post.

Projektets första version börjar med Create och Read.

Arbetsordning

Bygg i små steg

  1. Skapa databas och tabell.
  2. Lägg till en hårdkodad post.
  3. Visa alla poster.
  4. Lägg till sökning.
  5. Koppla funktionerna till menyn.
  6. Lägg till felhantering och fler testfall.

databas.py

Import och databasfil

import sqlite3

DB_FIL = "poster.db"

Alla databasfunktioner använder samma fil.

Skapa tabell

Projektets första funktion

def skapa_tabell():
    try:
        conn = sqlite3.connect(DB_FIL)
        cursor = conn.cursor()
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS poster (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                namn TEXT NOT NULL,
                info TEXT
            )
        """)
        conn.commit()
        conn.close()
    except Exception as e:
        print("Fel vid tabellskapande:", e)

Testa direkt

Kontrollpunkt 1

skapa_tabell()
  • Skapas filen poster.db?
  • Finns tabellen poster?
  • Har tabellen rätt kolumner?

Fortsätt inte förrän grunden fungerar.

Create

Lägg till en post

cursor.execute(
    "INSERT INTO poster (namn, info) VALUES (?, ?)",
    (namn, info)
)
conn.commit()

Platshållarna ? får värden från tuplen.

commit() sparar ändringen.

Create

Hela funktionen

def lagg_till():
    namn = input("Ange namn: ")
    info = input("Ange info: ")

    try:
        conn = sqlite3.connect(DB_FIL)
        cursor = conn.cursor()
        cursor.execute(
            "INSERT INTO poster (namn, info) VALUES (?, ?)",
            (namn, info)
        )
        conn.commit()
        conn.close()
        print("Post tillagd.")
    except Exception as e:
        print("Kunde inte lägga till post:", e)

Read

Visa alla poster

cursor.execute("SELECT * FROM poster")
resultat = cursor.fetchall()

if resultat:
    for rad in resultat:
        print(f"{rad[0]}. {rad[1]} - {rad[2]}")
else:
    print("Inga poster hittades.")

Sökning

Sök i två kolumner

cursor.execute(
    "SELECT * FROM poster "
    "WHERE namn LIKE ? OR info LIKE ?",
    ("%" + sokord + "%", "%" + sokord + "%")
)

% gör att sökordet får finnas mitt i texten.

Sökresultat

Visa träffar eller inget resultat

resultat = cursor.fetchall()

if resultat:
    for rad in resultat:
        print(f"{rad[0]}. {rad[1]} - {rad[2]}")
else:
    print("Inga träffar.")

main.py

Importera databasmodulen

import databas

def main():
    databas.skapa_tabell()

Tabellen skapas innan användaren kan göra menyval.

Meny

Projektets kommandon

def visa_meny():
    print("1. Lägg till post")
    print("2. Visa alla")
    print("3. Sök")
    print("4. Avsluta")

Menyval

Koppla val till funktioner

if val == "1":
    databas.lagg_till()
elif val == "2":
    databas.visa_alla()
elif val == "3":
    databas.sok()
elif val == "4":
    break
else:
    print("Ogiltigt val.")

Ansvar

Menyn känner inte till SQL

main.py:
databas.sok()

Huvudfilen begär en sökning.

databas.py:
SELECT * FROM poster ...

Databasmodulen utför sökningen.

Felhantering

Databasoperationer kan misslyckas

  • Databasfilen kan inte öppnas.
  • SQL-kommandot kan vara felaktigt.
  • Tabellen eller en kolumn kan saknas.
  • Inmatningen kan vara tom eller ogiltig.

Visa tydliga felmeddelanden och testa felvägarna.

Testplan

Testa varje del separat

  1. Skapa databasen och tabellen.
  2. Lägg till en post.
  3. Visa alla poster.
  4. Sök med en träff.
  5. Sök utan träff.
  6. Starta om programmet och kontrollera att data finns kvar.

Dokumentera

Skriv ner projektets struktur

  • Vad är programmets syfte?
  • Vilka filer ingår?
  • Vilka tabeller och kolumner används?
  • Hur startas programmet?
  • Vilka funktioner är färdiga och vad återstår?

Bygg vidare

När grunden fungerar

  • lägg till Update och Delete
  • förbättra valideringen
  • sortera eller filtrera resultat
  • skapa fler tabeller och relationer
  • bygg ett grafiskt gränssnitt senare

Utöka först när MVP:n är stabil och testad.

Öva

Starta ditt projekt

  1. Välj projektidé.
  2. Bestäm tabell och kolumner.
  3. Skapa main.py och databas.py.
  4. Bygg Create och Read.
  5. Lägg till sökning.
  6. Testa och dokumentera varje steg.

Sammanfattning

Kom ihåg

  • Utgå från planen och bygg MVP:n först.
  • Separera meny och databas i olika moduler.
  • Testa databasfunktionerna innan menyn kopplas in.
  • Använd platshållare i SQL-frågor.
  • Hantera fel och dokumentera projektet.
  • Bygg Update, Delete och andra tillägg senare.