Як видалити всі рядки в одній таблиці за допомогою Flask-SQLAlchemy?
Шукаємо щось подібне:
>>> users = models.User.query.all()
>>> models.db.session.delete(users)
# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
Як видалити всі рядки в одній таблиці за допомогою Flask-SQLAlchemy?
Шукаємо щось подібне:
>>> users = models.User.query.all()
>>> models.db.session.delete(users)
# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
Відповіді:
Спробуйте delete:
models.User.query.delete()
З документів :Returns the number of rows deleted, excluding any cascades.
Model.query.filter(Model.some_id == some_id, Model.other_id.in_(other_ids).delete()
Flask-SQLAlchemyспробуйте User.query.delete()як queryоб'єкт, оскільки об'єкт 'BaseQuery' не можна викликати. Перевірено та перевірено.
Відповідь DazWorrall на місці. Ось варіант, який може бути корисним, якщо ваш код структурований інакше, ніж OP:
num_rows_deleted = db.session.query(Model).delete()
Також не забувайте, що видалення не набуде чинності, доки ви не здійсните комітування, як у цьому фрагменті:
try:
num_rows_deleted = db.session.query(Model).delete()
db.session.commit()
except:
db.session.rollback()
Видалити всі записи
#for all records
db.session.query(Model).delete()
db.session.commit()
Видалено один рядок
тут DB є об'єктом класу Flask-SQLAlchemy. Він видалить з нього всі записи, і якщо ви хочете видалити конкретні записи, спробуйте filterпункт у запиті. напр.
#for specific value
db.session.query(Model).filter(Model.id==123).delete()
db.session.commit()
Видалити один запис за об’єктом
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
models.User.query().delete()