Programmering nivå 2
Kap 4.7 – Miniuppgift: Använda SQLite-databaser
Bygg ett litet bibliotekssystem med databas, moduler och sökning.
Mål med lektionen
När du har arbetat klart med denna lektion ska du kunna:
- Skapa och använda en SQLite-databas i Python med biblioteket
sqlite3. - Skapa tabeller, lägga till poster, söka efter data och läsa ut all data från databasen.
- Strukturera din kod i moduler med funktioner för bättre överblick.
- Använda
try/except-block för att hantera vanliga fel vid databasanslutning.
Så här lär du dig bäst
Arbeta med konkreta exempel: börja med att skapa databasen och tabellen. Skriv sedan funktioner för att lägga till data, visa alla poster och söka i databasen. Dela upp din kod i minst två moduler - en för gränssnittet och en för databasanropen. Testa dina funktioner separat och se till att varje steg fungerar innan du går vidare.
Centrala begrepp
- SQLite - En lätt, filbaserad databas som inte kräver någon server.
- SQL - Structured Query Language, språket som används för att kommunicera med databasen.
- Moduler - Att dela upp din kod i olika
.py-filer med specifika funktioner. - Felhantering - Att förutse och hantera fel vid till exempel anslutning eller SQL-kommandon.
Struktur för ditt program
Skapa två filer i samma mapp:
databas.py- innehåller all kod som pratar med databasen.main.py- innehåller menyn och användarens val.
Databasmodul: databas.py
import sqlite3
DB_FIL = "bibliotek.db"
def skapa_databas():
try:
conn = sqlite3.connect(DB_FIL)
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS bocker (
id INTEGER PRIMARY KEY AUTOINCREMENT,
titel TEXT NOT NULL,
forfattare TEXT NOT NULL
)
""")
conn.commit()
conn.close()
except Exception as e:
print("Fel vid skapande av databas:", e)
def lagg_till_bok(titel, forfattare):
try:
conn = sqlite3.connect(DB_FIL)
cursor = conn.cursor()
cursor.execute(
"INSERT INTO bocker (titel, forfattare) VALUES (?, ?)",
(titel, forfattare)
)
conn.commit()
conn.close()
print("Bok tillagd!")
except Exception as e:
print("Kunde inte lägga till bok:", e)
def sok_bok(nyckelord):
try:
conn = sqlite3.connect(DB_FIL)
cursor = conn.cursor()
cursor.execute(
"SELECT * FROM bocker WHERE titel LIKE ? OR forfattare LIKE ?",
("%" + nyckelord + "%", "%" + nyckelord + "%")
)
resultat = cursor.fetchall()
conn.close()
for bok in resultat:
print(f"{bok[0]}. {bok[1]} - {bok[2]}")
if not resultat:
print("Inga träffar.")
except Exception as e:
print("Sökning misslyckades:", e)
def visa_alla_bocker():
try:
conn = sqlite3.connect(DB_FIL)
cursor = conn.cursor()
cursor.execute("SELECT * FROM bocker")
resultat = cursor.fetchall()
conn.close()
for bok in resultat:
print(f"{bok[0]}. {bok[1]} - {bok[2]}")
if not resultat:
print("Inga böcker finns än.")
except Exception as e:
print("Kunde inte hämta böcker:", e)
Huvudfil: main.py
import databas
def visa_meny():
print("\nMeny:")
print("1. Lägg till bok")
print("2. Sök bok")
print("3. Visa alla böcker")
print("4. Avsluta")
def main():
databas.skapa_databas()
while True:
visa_meny()
val = input("Välj alternativ: ")
if val == "1":
titel = input("Titel: ")
forfattare = input("Författare: ")
databas.lagg_till_bok(titel, forfattare)
elif val == "2":
nyckelord = input("Sökord (titel/författare): ")
databas.sok_bok(nyckelord)
elif val == "3":
databas.visa_alla_bocker()
elif val == "4":
print("Avslutar...")
break
else:
print("Ogiltigt val.")
if __name__ == "__main__":
main()
Att testa
- Kör
main.pyoch kontrollera att filenbibliotek.dbskapas. - Lägg till flera böcker med olika titlar och författare.
- Sök på både titel och författare för att se att
LIKE-frågan fungerar. - Stäng programmet, starta det igen och kontrollera att böckerna finns kvar.
Du kan även öppna bibliotek.db i VS Code med tillägget SQLite Viewer
av publisher Florian Klampfer för att se tabellen och raderna visuellt.
Sammanfattning
- Du har skapat en komplett programstruktur för databashantering med SQLite.
- Du har använt funktioner och moduler för att organisera koden.
- Du har arbetat med SQL-kommandon för att söka, spara och läsa data.
- Du är nu redo att ta dig an Lärarbedömd uppgift 4 med god förberedelse.