Die Funktion con.commit() in Zeile 23 ist notwendig, um die entsprechende SQL-Anweisung ›dauerhaft‹ auszuführen, da die Ausführung sonst nur während der aktuellen Verbindung zur Datenbank erhalten bleibt. Dies gilt für INSERT, UPDATE und DELETE.
Folgendes Beispiel veranschaulicht dieses Verhalten:
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("INSERT INTO `adressen` (`vorname`, `nachname`, `geburtsdatum`, `plz`, `ort`, `strasse`, `hausnummer`, `geburtsort`) VALUES ('Otto', 'Krause', '21.07.1923', '10001', 'Musterstadt', 'Hauptstraße', '47', 'Dresden')")
#con.commit() # wird zunächst nicht ausgeführt, da die Funktion auskommentiert ist
dbcursor.execute("SELECT * FROM `adressen`")
for datensatz in dbcursor:
print(datensatz) # der neue Eintrag ist hier noch vorhanden
con.close() # Datenbankverbindung wird beendet
print()
con = sqlite3.connect("Python/mydatabase.db") # Datenbankverbindung wird erneut hergestellt
dbcursor = con.cursor()
dbcursor.execute("SELECT * FROM `adressen`")
for datensatz in dbcursor:
print(datensatz) # der neue Eintrag ist hier nicht mehr vorhanden
con.close()
Um die Datensätze einer Datenbanktabelle abzufragen, wird die SQL-Anweisung SELECT verwendet.
Code auswählen
1
2
3
4
5
6
7
8
9
10
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("SELECT * FROM `adressen`")
for datensatz in dbcursor:
print(datensatz)
con.close()
Sollen nur bestimmte Felder abgefragt werden, gibt man diese anstelle des Asterisken * an.
Code auswählen
1
2
3
4
5
6
7
8
9
10
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("SELECT `vorname`, `nachname` FROM `adressen`")
for datensatz in dbcursor:
print(datensatz)
con.close()
Über das Schlüsselwort WHERE lässt sich die Abfrage auf bestimmte Datensätze einschränken, die der angegebenen Bedingung entsprechen. Im Beispiel werden die Datensätze gesucht, deren Feld ort den Wert Musterdorf enthält.
Code auswählen
1
2
3
4
5
6
7
8
9
10
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("SELECT * FROM `adressen` WHERE `ort` = 'Musterdorf'")
for datensatz in dbcursor:
print(datensatz)
con.close()
Über das Schlüsselwort LIKE lässt sich ein Datensatz auswählen, der dem angegebenen Begriff ähnelt. Der Platzhalter % steht dabei für eine beliebige Anzahl von Zeichen. Der Platzhalter _ steht für genau ein Zeichen.
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("SELECT * FROM `adressen` WHERE `nachname` LIKE '%er'") # findet Meier und Müller
for datensatz in dbcursor:
print(datensatz)
print()
dbcursor.execute("SELECT * FROM `adressen` WHERE `vorname` LIKE 'pa%'") # findet Paul und Paula
for datensatz in dbcursor:
print(datensatz)
print()
dbcursor.execute("SELECT * FROM `adressen` WHERE `nachname` LIKE 'M__er'") # findet Meier aber nicht Müller
for datensatz in dbcursor:
print(datensatz)
con.close()
Über das Schlüsselwort ORDER BY kann das Ergebnis einer Abfrage sortiert werden. Der Zusatz DESC (descending) steht dabei für eine absteigende Sortierung. Der Zusatz ASC (ascending) steht für eine aufsteigende Sortierung, kann aber weggelassen werden, da normalerweise ohnehin aufsteigend sortiert wird.
Code auswählen
1
2
3
4
5
6
7
8
9
10
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("SELECT * FROM `adressen` ORDER BY `nachname` DESC")
for datensatz in dbcursor:
print(datensatz)
con.close()
Über das Schlüsselwort LIMIT kann der Bereich eingegrenzt werden, für den eine Abfrage erfolgen soll. Der erste angegebene Wert gibt den ersten Datensatz an, bei dem die Abfrage beginnt. Der zweite Wert steht für die maximale Anzahl der abzufragenden Datensätze.
In folgendem Beispiel sollen 20 Datensätze ab Datensatz 10 abgefragt werden.
Code auswählen
1
2
3
4
5
6
7
8
9
10
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("SELECT * FROM `adressen` LIMIT 10,20")
for datensatz in dbcursor:
print(datensatz)
con.close()
Um einen Datensatz zu löschen, wird die SQL-Anweisung DELETE verwendet.
Code auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("DELETE FROM `adressen` WHERE `id` = '2'")
con.commit()
# Datensätze anzeigen
print()
dbcursor.execute("SELECT * FROM `adressen`")
for datensatz in dbcursor:
print(datensatz)
con.close()