Specifieke records verwijderen
Met een where()-clausule kun je een delete-statement richten op alleen
bepaalde records. Jason verwijderde bijvoorbeeld alle rijen uit de tabel employees met id 3 met het volgende delete-statement:
delete(employees).where(employees.columns.id == 3)
Hier ga je ALLE rijen verwijderen die 'M' hebben in de kolom sex en 36 in de kolom age. We hebben aan het begin code toegevoegd die het totale aantal van deze rijen berekent. Het is belangrijk om te controleren dat dit overeenkomt met het aantal rijen dat je daadwerkelijk verwijdert.
Deze oefening maakt deel uit van de cursus
Introductie tot databases in Python
Oefeninstructies
- Bouw een
delete-statement om data uit de tabelcensuste verwijderen. Sla dit op alsdelete_stmt. - Voeg een
where-clausule toe aandelete_stmtdie eenand_bevat om te filteren op rijen die'M'hebben in de kolomsexEN36in de kolomage. - Voer het delete-statement uit.
- Verzend het antwoord om de
rowcountvanresultste printen, en ookto_delete, dat het aantal rijen teruggeeft dat verwijderd zou moeten worden. Deze moeten overeenkomen; dit is een belangrijke sanity check!
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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)