web-dev-qa-db-fra.com

Flask-SQLAlchemy comment supprimer toutes les lignes d'une seule table

Comment puis-je supprimer toutes les lignes d'une seule table à l'aide de Flask-SQLAlchemy?

Vous cherchez quelque chose comme ça:

>>> users = models.User.query.all()
>>> models.db.session.delete(users)

# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
75
SeanPlusPlus

Essayez delete :

models.User.query().delete()

De les docs : Returns the number of rows deleted, excluding any cascades.

121
DazWorrall

La réponse de DazWorrall est parfaite. Voici une variante qui pourrait être utile si votre code est structuré différemment des OP:

num_rows_deleted = db.session.query(Model).delete()

De plus, n'oubliez pas que la suppression ne prendra effet que lorsque vous aurez validé, comme dans l'extrait de code:

try:
    num_rows_deleted = db.session.query(Model).delete()
    db.session.commit()
except:
    db.session.rollback()
79
Steve Saporta

Flask-Sqlalchemy

#for all records
db.session.query(Model).delete()
db.session.commit()

ici, DB correspond à la classe d'objet Flask-SQLAlchemy. Il supprimera tous les enregistrements et si vous souhaitez supprimer des enregistrements spécifiques, essayez alors la clause filter dans la requête. ex.

#for specific value
db.session.query(Model).filter(Model.id==123).delete()
db.session.commit()
39
anand tripathi