Supprimer des enregistrements précis
En utilisant une clause where(), vous pouvez cibler l'instruction delete afin de retirer seulement certains enregistrements. Par exemple, Jason a supprimé toutes les lignes de la table employees qui avaient id 3 avec l'instruction suivante :
delete(employees).where(employees.columns.id == 3)
Ici, vous allez supprimer TOUTES les lignes qui ont 'M' dans la colonne sex et 36 dans la colonne age. Nous avons inclus du code au début qui calcule le nombre total de ces lignes. Il est important de vous assurer que c'est bien le nombre de lignes que vous supprimez réellement.
Cette activité fait partie du cours
Introduction aux bases de données en Python
Instructions de l’exercice
- Créez une instruction
deletepour retirer des données de la tablecensus. Enregistrez-la dansdelete_stmt. - Ajoutez une clause
whereàdelete_stmtqui contient unand_pour filtrer les lignes ayant'M'dans la colonnesexET36dans la colonneage. - Exécutez l'instruction de suppression.
- Soumettez la réponse pour afficher le
rowcountderesults, ainsi queto_delete, qui retourne le nombre de lignes devant être supprimées. Les deux valeurs devraient correspondre ; c'est une vérification essentielle!
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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)