Mazání konkrétních záznamů
Pomocí klauzule where() můžeš příkaz delete zacílit tak, aby odstranil jen určité záznamy. Jason například smazal všechny řádky z tabulky employees s hodnotou id rovnou 3 tímto příkazem:
delete(employees).where(employees.columns.id == 3)
V tomto cvičení smažeš VŠECHNY řádky, které mají v sloupci sex hodnotu 'M' a ve sloupci age hodnotu 36. Na začátku je připravený kód, který vypočítá celkový počet takových řádků. Je důležité ověřit, že skutečně smažeš právě tolik řádků — nic víc, nic míň.
Toto cvičení je součástí kurzu
Introduction to Databases in Python
Pokyny k cvičení
- Sestav příkaz
deletepro odstranění dat z tabulkycensusa ulož ho do proměnnédelete_stmt. - Přidej k
delete_stmtklauzuliwhere, která obsahujeand_filtrující řádky s hodnotou'M've sloupcisexA ZÁROVEŇ hodnotou36ve sloupciage. - Proveď příkaz delete.
- Odešli odpověď, aby se vypsal
rowcountproměnnéresultsi hodnotato_delete, která udává počet řádků, jež mají být smazány. Obě čísla by se měla shodovat — to je důležitá kontrola správnosti!
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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)