Datenbank auslesen und anzeigen: SELECT * FROM
Wir wollen eine Datenbank auslesen und anzeigen. Dazu müssen wir auswählen, was angezeigt werden soll. Wir selektieren (engl. „select“) also eine Teilmenge (oder auch die kompletten Datensätze) unserer Datenbank. Am Anfang sind wir nicht wählerisch und nehmen alle Felder – sprich „Alles“ wird über den Stern „*“ ausgewählt. Jetzt müssen wir noch unsere SQL-Anweisung mitgeben, von welcher Tabelle etwas ausgelesen wird („von“ = engl. „from“):
SELECT * FROM tabellennamen
In unserem bisherigen Beispiel wäre das:
zeiger.execute("SELECT * FROM personen")
Und nun „holen“ wir die Daten ab und übergeben diese einer Liste. Am Rande bemerkt, das englische Wort für holen bzw. abholen ist „fetch“. Mit den abgeholten in einer Liste gespeicherten Daten können wir weiterarbeiten – in unserem Fall erst einmal ausgeben um zu sehen, ob die in die Datenbank geschriebenen Daten auch wieder korrekt herauskommen.
inhalt = zeiger.fetchall()
Da wir nur Daten abholen, benötigen wir keine commit()
-Anweisung.
Jetzt noch die Ausgabe:
print(inhalt)
Der dazu notwendige komplette Code:
import sqlite3
verbindung = sqlite3.connect("datenbank/geburtstage.db")
zeiger = verbindung.cursor()
zeiger.execute("SELECT * FROM personen")
inhalt = zeiger.fetchall()
print(inhalt)
verbindung.close()
Als Feedback bekommen wir folgende Ausgabe auf dem Bildschirm:
[('Johann Wolfgang von', 'Goethe', '28.8.1749'), ('Johann Wolfgang von', 'Goethe', '28.8.1749'), ('Friedrich', 'Schiller', '10.11.1759')]
Wir haben also eine Liste mit unseren einzelnen Elementen. Unseren Goethe haben wir versehentlich 2-mal in die Datenbank gespeichert. Interessanterweise scheint das Geburtsdatum korrekt übernommen worden zu sein, obwohl wir dies in deutscher Schreibweise gespeichert haben.
Nicht alle Felder auslesen
Möchte ich aus meiner Tabelle nicht alle Felder auslesen, kann ich dies in der SELECT
-Anweisung mitgeben. Jetzt gebe ich anstelle des Sterns (sprich nicht mehr alle Felder) meine gewünschten Felder an.
Möchte ich aus meiner Datenbank „personen“ nur noch den Nachnamen und den Geburtstag erhalten, gebe ich nur diese beiden Feldnamen an:
SELECT nachname, geburtstag FROM personen"
Und im kompletten Code:
import sqlite3
verbindung = sqlite3.connect("datenbank/geburtstage.db")
zeiger = verbindung.cursor()
zeiger.execute("SELECT nachname, geburtstag FROM personen")
inhalt = zeiger.fetchall()
print(inhalt)
verbindung.close()
Als Ergebnis erhalten wir:
[('Goethe', '28.8.1749'), ('Goethe', '28.8.1749'), ('Schiller', '10.11.1759')]