Ta bort specifika poster
Med hjälp av en where()-sats kan du styra delete-satsen så att den bara tar bort vissa poster. Jason tog till exempel bort alla rader från tabellen employees med id 3 med följande delete-sats:
delete(employees).where(employees.columns.id == 3)
Här tar du bort ALLA rader som har 'M' i kolumnen sex och 36 i kolumnen age. Vi har inkluderat kod i början som beräknar det totala antalet sådana rader. Det är viktigt att kontrollera att det faktiskt är det antalet rader du tar bort.
Den här övningen är en del av kursen
Introduktion till databaser i Python
Övningsinstruktioner
- Bygg en
delete-sats för att ta bort data från tabellencensus. Spara den somdelete_stmt. - Lägg till en
where-sats tilldelete_stmtsom innehåller ettand_för att filtrera fram rader som har'M'i kolumnensexOCH36i kolumnenage. - Kör delete-satsen.
- Skicka in svaret för att skriva ut
rowcountfrånresults, samtto_delete, som returnerar antalet rader som ska tas bort. Dessa bör stämma överens – det är en viktig kontroll!
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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)