Zacznij terazZacznij za darmo

Usuwanie wybranych rekordów

Dzięki klauzuli where() możesz ograniczyć działanie instrukcji delete tylko do wybranych rekordów. Na przykład Jason usunął wszystkie wiersze z tabeli employees, które miały wartość 3 w kolumnie id, używając następującej instrukcji:

delete(employees).where(employees.columns.id == 3) 

W tym ćwiczeniu usuniesz WSZYSTKIE wiersze, które mają wartość 'M' w kolumnie sex oraz wartość 36 w kolumnie age. Na początku dodaliśmy kod obliczający łączną liczbę takich wierszy. Ważne jest, aby upewnić się, że faktycznie usuwasz dokładnie tyle rekordów.

To ćwiczenie jest częścią kursu

Wprowadzenie do baz danych w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Zbuduj instrukcję delete, która usunie dane z tabeli census. Zapisz ją jako delete_stmt.
  • Dołącz do delete_stmt klauzulę where zawierającą and_, która odfiltruje wiersze mające wartość 'M' w kolumnie sex ORAZ wartość 36 w kolumnie age.
  • Wykonaj instrukcję usuwania.
  • Prześlij odpowiedź, aby wyświetlić wartość rowcount zmiennej results oraz zmienną to_delete, która zwraca liczbę wierszy do usunięcia. Obie wartości powinny być zgodne – to ważna weryfikacja poprawności działania kodu!

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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)
Edytuj i uruchom kod