Übungen
Aufgabe 1
Schreibe ein Programm, das die 20 größten Orte in Rheinland-Pfalz ausgibt.
Durchlaufe die Datensätze und zähle mit, bis der 20. Datensatz erreicht ist.
Bestimmt brauchst du keine Hilfe für den SQL-Befehl, wenn doch - Klicke auf den Pfeil!
Aufgabe 2
Die folgenden beiden Programmfragmente geben beide die Liste aller Millionenstädte in Europa aus.
Dennoch ist in der Ausführung ein deutlicher Unterschied festzustellen. Du kannst das Programm mit beiden
Varianten hier herunterladen.
Erkläre, warum das so ist!
Welche Schlussfolgerung ziehst du daraus?
Variante 1:
SQLBefehl = "SELECT ort.Name, ort.Einwohner, kontinent.Name AS Kontinentname \
FROM ort, land, kontinent \
WHERE ort.LNR = land.LNR \
AND land.KNR = kontinent.KNR"
cursor.execute(SQLBefehl)
row = cursor.fetchone()
while row != None:
if row['Einwohner']>1000000 and row['Kontinentname']=='Europa':
print("%s (%d)" % (row['Name'],row['Einwohner']) )
row = cursor.fetchone()
Variante 2:
SQLBefehl = "SELECT ort.Name, ort.Einwohner \
FROM ort, land, kontinent \
WHERE ort.LNR = land.LNR \
AND land.KNR = kontinent.KNR \
AND ort.Einwohner > 1000000 \
AND kontinent.Name = 'Europa'"
cursor.execute(SQLBefehl)
row = cursor.fetchone()
while row != None:
print("%s (%d)" % (row['Name'],row['Einwohner']) )
row = cursor.fetchone()
Aufgabe 3
Bist du gut in Erdkunde?
Schreibe ein Programm, das alle Hauptstädte Europas nacheinander ausgibt und den
Benutzer nach dem zugehörigen Land fragt.
Zähle die "Treffer" und "Nieten"!
Hier wieder der SQL-Befehl als Hilfe.
Aufgabe 4
Erstelle ein Programm, das für ein zufälliges (!) europäisches Land abfragt, was die Hauptstadt ist und dann auch das Ergebnis in der Datenbank überprüft.
Hilfe: Wenn du alle Datensätze mit fetchall()
gelesen hast, dann kannst du
z.B. mit cursor.rowcount
die Anzahl der Ergebnis-Datensätze abfragen.
Aufgabe 5
Schreibe ein Programm, bei dem man einen beliebigen SQL-Befehl eingeben kann und das dann die Ergebnisse ausgibt. Dabei sollen Fehler beim Verbinden und Fehler bei der Ausführung (z.B. durch falsche SQL-Befehle) abgefangen und dem Benutzer ausgegeben werden.
Erweiterungen:
- Schaffst du es die Funktionalität für den Datenbankzugriff in eine eigene Klasse zu "kapseln"?
- Entwickle ein Konsolenprogramm und ein GUI-Programm unter Verwendung der Zugriffsklasse.