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
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:

Code kopieren
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.

Code kopieren
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 kopieren
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 kopieren
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.

Code kopieren
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 kopieren
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 kopieren
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.

Code kopieren
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:

Code kopieren
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.

Code kopieren
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()