126 votes

Flask-SQLAlchemy : comment supprimer toutes les lignes d'une même table ?

Comment supprimer toutes les lignes d'une seule table en utilisant Flask-SQLAlchemy ?

Je cherche 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

175voto

DazWorrall Points 12662

Essayez delete :

models.User.query.delete()

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

127voto

Steve Saporta Points 155

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

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

N'oubliez pas non plus que la suppression ne sera pas effective tant que vous n'aurez pas effectué une validation, comme dans cet extrait :

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

80voto

anand tripathi Points 3051

Flask-Sqlalchemy

Supprimer tous les enregistrements

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

Suppression d'une seule rangée

ici DB est la classe objet Flask-SQLAlchemy. Elle supprimera tous les enregistrements et si vous voulez supprimer des enregistrements spécifiques, essayez de faire ce qui suit filter dans la requête. ex.

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

Supprimer un seul enregistrement par objet

record_obj = db.session.query(Model).filter(Model.id==123).first()
db.session.delete(record_obj)
db.session.commit()

https://flask-sqlalchemy.palletsprojects.com/en/2.x/queries/#deleting-records

-1voto

Mohamed MosȜd Points 80

Écrire des commandes sql brutes est parfois utile

    def delete_table_content(self, table_name: str):
          "deletes table contents"
          CONNECTION = db_url
          conn = psycopg2.connect(CONNECTION)
          conn.autocommit = True
          cursor = conn.cursor()
          cursor.execute("TRUNCATE TABLE {}".format(table_name))
          logger.warning("deleted table {} content".format(table_name))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X