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
- Skapa databas och tabell.
- Lägg till en hårdkodad post.
- Visa alla poster.
- Lägg till sökning.
- Koppla funktionerna till menyn.
- 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
- Skapa databasen och tabellen.
- Lägg till en post.
- Visa alla poster.
- Sök med en träff.
- Sök utan träff.
- 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
- Välj projektidé.
- Bestäm tabell och kolumner.
- Skapa
main.pyochdatabas.py. - Bygg Create och Read.
- Lägg till sökning.
- 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.