Ü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 herunterladen: für MySQL und SQLite
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[1]>1000000 and row[2]=='Europa':
print("%s (%d)" % (row[0],row[1]) )
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[0],row[1]) )
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 rows=fetchall()
gelesen hast, dann kannst du
z.B. mit len(rows)
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.