Bestimmte Datensätze löschen
Mit einer where()-Klausel kannst du das delete-Statement so einschränken, dass nur bestimmte Datensätze entfernt werden. Jason hat zum Beispiel alle Zeilen aus der Tabelle employees gelöscht, die die id 3 hatten, mit dem folgenden DELETE-Statement:
delete(employees).where(employees.columns.id == 3)
Hier löschst du ALLE Zeilen, die in der Spalte sex den Wert 'M' und in der Spalte age den Wert 36 haben. Am Anfang ist Code enthalten, der die Gesamtzahl dieser Zeilen berechnet. Es ist wichtig sicherzustellen, dass dies die Anzahl der Zeilen ist, die du tatsächlich löschst.
Diese Übung ist Teil des Kurses
Einführung in Datenbanken mit Python
Anleitung zur Übung
- Erstelle ein
delete-Statement, um Daten aus der Tabellecensuszu entfernen. Speichere es alsdelete_stmt. - Hänge an
delete_stmteinewhere-Klausel an, die einand_enthält, um nach Zeilen zu filtern, die in der Spaltesexden Wert'M'UND in der Spalteageden Wert36haben. - Führe das DELETE-Statement aus.
- Sende die Antwort, um die
rowcountderresultssowieto_deleteauszugeben.to_deletegibt die Anzahl der Zeilen zurück, die gelöscht werden sollen. Beide Werte sollten übereinstimmen – das ist ein wichtiger Plausibilitätscheck!
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Build a statement to count records using the sex column for Men ('M') age 36: count_stmt
count_stmt = select([func.count(census.columns.sex)]).where(
and_(census.columns.sex == 'M',
census.columns.age == 36)
)
# Execute the select statement and use the scalar() fetch method to save the record count
to_delete = connection.execute(count_stmt).scalar()
# Build a statement to delete records from the census table: delete_stmt
delete_stmt = ____
# Append a where clause to target Men ('M') age 36: delete_stmt
delete_stmt = delete_stmt.____(
____(census.columns.sex == ____,
____ == ____)
)
# Execute the statement: results
results = connection.execute(____)
# Print affected rowcount and to_delete record count, make sure they match
print(results.rowcount, to_delete)