Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Bouw een delete-statement om data uit de tabel census te verwijderen. Sla dit op als delete_stmt.
  • Voeg een where-clausule toe aan delete_stmt die een and_ bevat om te filteren op rijen die 'M' hebben in de kolom sex EN 36 in de kolom age.
  • Voer het delete-statement uit.
  • Verzend het antwoord om de rowcount van results te printen, en ook to_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)
Code bewerken en uitvoeren