Programmering nivå 2

Kap 5.2 – Projektarbete med databas

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

Mål med lektionen

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

  • Kunna strukturera ett eget program som använder databas för att lagra och hantera information.
  • Använda tidigare kunskaper om SQLite, moduler och programstruktur i ett eget projekt.
  • Förstå hur man planerar, utvecklar och testar en applikation från grunden.

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

Ditt projektarbete bygger på vad du lärt dig i tidigare moduler. Du lär dig bäst genom att börja enkelt och sedan bygga vidare steg för steg. Börja med att få grunden att fungera: skapa databasen och de viktigaste funktionerna. Dela upp koden i moduler och använd funktioner för återanvändbarhet. Dokumentera din kod noggrant. Se till att din kod hanterar fel och att du testar varje del noggrant.

Centrala begrepp

  • Moduler - Att dela upp koden i flera filer för bättre struktur.
  • SQL och SQLite - Språket och databasen du använder för att lagra information.
  • CRUD - Create, Read, Update, Delete: de fyra grundfunktionerna i databashantering.
  • Programstruktur - Hur du organiserar menyer, funktioner och databasanrop.
  • Felhantering - Att skydda programmet från att krascha när något går fel.

Projektkrav

Du ska nu påbörja ett eget databasprojekt. Projektet ska minst ha:

  • Ett menybaserat gränssnitt i konsolen.
  • En SQLite-databas med minst en tabell.
  • Funktioner för att lägga till och visa data.
  • En sökfunktion med SQL.
  • Kod uppdelad i minst två moduler, till exempel main.py och databas.py.
  • Användning av try/except för att hantera fel.

Exempel på programidéer

  • Bokregister
  • Receptplanerare
  • Elevhanteringssystem
  • Film- eller serieregister

Förslag på struktur

En vanlig uppdelning är att låta main.py hantera menyn och låta databas.py hantera all kontakt med databasen.

main.py - användargränssnittet

import databas

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

def main():
    databas.skapa_tabell()

    while True:
        visa_meny()
        val = input("Val: ")

        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.")

if __name__ == "__main__":
    main()

databas.py - hanterar databasen

import sqlite3

DB_FIL = "poster.db"

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)

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)

def visa_alla():
    try:
        conn = sqlite3.connect(DB_FIL)
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM poster")
        resultat = cursor.fetchall()
        conn.close()

        if resultat:
            for rad in resultat:
                print(f"{rad[0]}. {rad[1]} - {rad[2]}")
        else:
            print("Inga poster hittades.")
    except Exception as e:
        print("Fel vid hämtning:", e)

def sok():
    sokord = input("Sök efter: ")

    try:
        conn = sqlite3.connect(DB_FIL)
        cursor = conn.cursor()
        cursor.execute(
            "SELECT * FROM poster WHERE namn LIKE ? OR info LIKE ?",
            ("%" + sokord + "%", "%" + sokord + "%")
        )
        resultat = cursor.fetchall()
        conn.close()

        if resultat:
            for rad in resultat:
                print(f"{rad[0]}. {rad[1]} - {rad[2]}")
        else:
            print("Inga träffar.")
    except Exception as e:
        print("Fel vid sökning:", e)

Öva - Starta ditt projekt

  1. Välj ett av projekten ovan eller hitta på ett eget.
  2. Skapa en databas och tabell.
  3. Gör menyer och funktioner.
  4. Testa delarna och dokumentera din kod.

Att tänka på när du bygger vidare

  • Börja med Create och Read innan du bygger mer avancerade funktioner.
  • Låt databasfunktionerna ligga i en egen modul så huvudfilen blir lätt att läsa.
  • Testa varje funktion separat innan du kopplar ihop allt i menyn.
  • Skriv tydliga felmeddelanden så användaren förstår vad som gick fel.

Sammanfattning

  • Du har nu påbörjat ett eget programmeringsprojekt med databas.
  • Du använder funktioner, moduler och SQLite i ett praktiskt sammanhang.
  • Du har förberett grunden till din slutuppgift eller ett större program.

Tillbaka till Kapitel 5