Jak usunąć wszystkie wiersze z jednej tabeli przy użyciu Flask-SQLAlchemy?
Szukam czegoś takiego:
>>> users = models.User.query.all()
>>> models.db.session.delete(users)
# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
python
sqlalchemy
flask-sqlalchemy
SeanPlusPlus
źródło
źródło
models.User.query().delete()
Model.query.filter(Model.some_id == some_id, Model.other_id.in_(other_ids).delete()
Flask-SQLAlchemy
spróbujUser.query.delete()
jakoquery
obiekt, ponieważ obiekt „BaseQuery” nie jest wywoływalny. Przetestowane i zweryfikowane.Odpowiedź DazWorrall jest trafna. Oto odmiana, która może być przydatna, jeśli Twój kod ma inną strukturę niż OP:
Nie zapominaj też, że usunięcie nie odniesie skutku, dopóki nie zatwierdzisz, jak w tym fragmencie:
try: num_rows_deleted = db.session.query(Model).delete() db.session.commit() except: db.session.rollback()
źródło
Flask-Sqlalchemy
Usuń wszystkie rekordy
#for all records db.session.query(Model).delete() db.session.commit()
Usunięto jeden wiersz
tutaj DB jest obiektem klasy Flask-SQLAlchemy. Usunie z niego wszystkie rekordy i jeśli chcesz usunąć określone rekordy, spróbuj użyć
filter
klauzuli w zapytaniu. dawny.#for specific value db.session.query(Model).filter(Model.id==123).delete() db.session.commit()
Usuń pojedynczy rekord według obiektu
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
źródło