Як видалити всі рядки в одній таблиці за допомогою 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()