Bitte warten...

Python: Datensätze verwalten

Neuen Datensatz anlegen

► SQLite-Dokumentation: INSERT
► Python-Dokumentation: lastrowid

Um einen neuen Datensatz anzulegen, wird die SQL-Anweisung INSERT verwendet.

Code kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. personen = []
  5. personen.append(["Hans", "Meier", "21.04.1987", "10001", "Musterstadt", "Hafenstraße", "34", "Hamburg"])
  6. personen.append(["Monika", "Müller", "03.11.1956", "10002", "Musterdorf", "Am Acker", "3", "München"])
  7. personen.append(["Paul", "Schmidt", "17.09.1972", "10001", "Musterstadt", "Bahnhofstraße", "129", "Stuttgart"])
  8. personen.append(["Paula", "Lehmann", "11.06.1999", "10002", "Musterdorf", "Dorfstraße", "17", "Berlin"])
  9. for person in personen:
  10. sql = "INSERT INTO `adressen` (`vorname`, `nachname`, `geburtsdatum`, `plz`, `ort`, `strasse`, `hausnummer`, `geburtsort`) VALUES (" \
  11. "'" + person[0] + "', " \
  12. "'" + person[1] + "', " \
  13. "'" + person[2] + "', " \
  14. "'" + person[3] + "', " \
  15. "'" + person[4] + "', " \
  16. "'" + person[5] + "', " \
  17. "'" + person[6] + "', " \
  18. "'" + person[7] + "')"
  19. dbcursor.execute(sql)
  20. con.commit()
  21. print(dbcursor.lastrowid) # gibt die ID des letzten Eintrags zurück
  22. 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:

Code kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. 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')")
  5. #con.commit() # wird zunächst nicht ausgeführt, da die Funktion auskommentiert ist
  6. dbcursor.execute("SELECT * FROM `adressen`")
  7. for datensatz in dbcursor:
  8. print(datensatz) # der neue Eintrag ist hier noch vorhanden
  9. con.close() # Datenbankverbindung wird beendet
  10. print()
  11. con = sqlite3.connect("Python/mydatabase.db") # Datenbankverbindung wird erneut hergestellt
  12. dbcursor = con.cursor()
  13. dbcursor.execute("SELECT * FROM `adressen`")
  14. for datensatz in dbcursor:
  15. print(datensatz) # der neue Eintrag ist hier nicht mehr vorhanden
  16. con.close()

Datensatz abfragen

► SQLite-Dokumentation: SELECT

Um die Datensätze einer Datenbanktabelle abzufragen, wird die SQL-Anweisung SELECT verwendet.

Code kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. dbcursor.execute("SELECT * FROM `adressen`")
  5. for datensatz in dbcursor:
  6. print(datensatz)
  7. con.close()

Sollen nur bestimmte Felder abgefragt werden, gibt man diese anstelle des Asterisken * an.

Code kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. dbcursor.execute("SELECT `vorname`, `nachname` FROM `adressen`")
  5. for datensatz in dbcursor:
  6. print(datensatz)
  7. 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 kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. dbcursor.execute("SELECT * FROM `adressen` WHERE `ort` = 'Musterdorf'")
  5. for datensatz in dbcursor:
  6. print(datensatz)
  7. 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.

Code kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. dbcursor.execute("SELECT * FROM `adressen` WHERE `nachname` LIKE '%er'") # findet Meier und Müller
  5. for datensatz in dbcursor:
  6. print(datensatz)
  7. print()
  8. dbcursor.execute("SELECT * FROM `adressen` WHERE `vorname` LIKE 'pa%'") # findet Paul und Paula
  9. for datensatz in dbcursor:
  10. print(datensatz)
  11. print()
  12. dbcursor.execute("SELECT * FROM `adressen` WHERE `nachname` LIKE 'M__er'") # findet Meier aber nicht Müller
  13. for datensatz in dbcursor:
  14. print(datensatz)
  15. 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 kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. dbcursor.execute("SELECT * FROM `adressen` ORDER BY `nachname` DESC")
  5. for datensatz in dbcursor:
  6. print(datensatz)
  7. 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 kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. dbcursor.execute("SELECT * FROM `adressen` LIMIT 10,20")
  5. for datensatz in dbcursor:
  6. print(datensatz)
  7. con.close()

Datensatz ändern

► SQLite-Dokumentation: UPDATE

Um Werte eines Datensatzes zu verändern, wird die SQL-Anweisung UPDATE verwendet.

Code kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. dbcursor.execute("UPDATE `adressen` SET `vorname` = 'Ilse', `nachname` = 'Schultz' WHERE `id` = '1'")
  5. con.commit()
  6. # Datensätze anzeigen
  7. print()
  8. dbcursor.execute("SELECT * FROM `adressen`")
  9. for datensatz in dbcursor:
  10. print(datensatz)
  11. con.close()

Datensatz kopieren

Um einen Datensatz zu kopieren, kann folgende Methode verwendet werden:

Code kopieren
  1. import sqlite3
  2. def copy_row(dbt, id, cursor):
  3. columns = ""
  4. cursor.execute("PRAGMA table_info(`" + dbt + "`)")
  5. for column in cursor:
  6. if column[1] != "id":
  7. columns += "`" + column[1] + "`, "
  8. columns = columns[:-2]
  9. sql = "INSERT INTO `" + dbt + "` (" + columns + ") SELECT " + columns + " FROM `" + dbt + "` WHERE `id` = '" + str(id) + "'"
  10. cursor.execute(sql)
  11. con.commit()
  12. con = sqlite3.connect("Python/mydatabase.db")
  13. dbcursor = con.cursor()
  14. copy_row("adressen", 3, dbcursor) # erzeugt eine Kopie des Datensatzes mit der ID 3
  15. # Datensätze anzeigen
  16. print()
  17. dbcursor.execute("SELECT * FROM `adressen`")
  18. for datensatz in dbcursor:
  19. print(datensatz)
  20. con.close()

Datensatz löschen

► SQLite-Dokumentation: DELETE

Um einen Datensatz zu löschen, wird die SQL-Anweisung DELETE verwendet.

Code kopieren
  1. import sqlite3
  2. con = sqlite3.connect("Python/mydatabase.db")
  3. dbcursor = con.cursor()
  4. dbcursor.execute("DELETE FROM `adressen` WHERE `id` = '2'")
  5. con.commit()
  6. # Datensätze anzeigen
  7. print()
  8. dbcursor.execute("SELECT * FROM `adressen`")
  9. for datensatz in dbcursor:
  10. print(datensatz)
  11. con.close()