Python: Datensätze verwalten
Neuen Datensatz anlegen
► SQLite-Dokumentation: INSERT
► Python-Dokumentation: lastrowid
Um einen neuen Datensatz anzulegen, wird die SQL-Anweisung INSERT verwendet.
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
personen = []
personen.append(["Hans", "Meier", "21.04.1987", "10001", "Musterstadt", "Hafenstraße", "34", "Hamburg"])
personen.append(["Monika", "Müller", "03.11.1956", "10002", "Musterdorf", "Am Acker", "3", "München"])
personen.append(["Paul", "Schmidt", "17.09.1972", "10001", "Musterstadt", "Bahnhofstraße", "129", "Stuttgart"])
personen.append(["Paula", "Lehmann", "11.06.1999", "10002", "Musterdorf", "Dorfstraße", "17", "Berlin"])
for person in personen:
sql = "INSERT INTO `adressen` (`vorname`, `nachname`, `geburtsdatum`, `plz`, `ort`, `strasse`, `hausnummer`, `geburtsort`) VALUES (" \
"'" + person[0] + "', " \
"'" + person[1] + "', " \
"'" + person[2] + "', " \
"'" + person[3] + "', " \
"'" + person[4] + "', " \
"'" + person[5] + "', " \
"'" + person[6] + "', " \
"'" + person[7] + "')"
dbcursor.execute(sql)
con.commit()
print(dbcursor.lastrowid) # gibt die ID des letzten Eintrags zurück
con.close()
► Python-Dokumentation: commit
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()
Datensatz abfragen
► SQLite-Dokumentation: SELECT
Um die Datensätze einer Datenbanktabelle abzufragen, wird die SQL-Anweisung SELECT verwendet.
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.
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.
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.
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.
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()
Datensatz ändern
► SQLite-Dokumentation: UPDATE
Um Werte eines Datensatzes zu verändern, wird die SQL-Anweisung UPDATE verwendet.
import sqlite3
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
dbcursor.execute("UPDATE `adressen` SET `vorname` = 'Ilse', `nachname` = 'Schultz' WHERE `id` = '1'")
con.commit()
# Datensätze anzeigen
print()
dbcursor.execute("SELECT * FROM `adressen`")
for datensatz in dbcursor:
print(datensatz)
con.close()
Datensatz kopieren
Um einen Datensatz zu kopieren, kann folgende Methode verwendet werden:
import sqlite3
def copy_row(dbt, id, cursor):
columns = ""
cursor.execute("PRAGMA table_info(`" + dbt + "`)")
for column in cursor:
if column[1] != "id":
columns += "`" + column[1] + "`, "
columns = columns[:-2]
sql = "INSERT INTO `" + dbt + "` (" + columns + ") SELECT " + columns + " FROM `" + dbt + "` WHERE `id` = '" + str(id) + "'"
cursor.execute(sql)
con.commit()
con = sqlite3.connect("Python/mydatabase.db")
dbcursor = con.cursor()
copy_row("adressen", 3, dbcursor) # erzeugt eine Kopie des Datensatzes mit der ID 3
# Datensätze anzeigen
print()
dbcursor.execute("SELECT * FROM `adressen`")
for datensatz in dbcursor:
print(datensatz)
con.close()
Datensatz löschen
► SQLite-Dokumentation: DELETE
Um einen Datensatz zu löschen, wird die SQL-Anweisung DELETE verwendet.
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()