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
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()