如何使用 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
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
,请在查询中使用 try 子句。前任。
#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
编写原始 sql 命令有时很有用
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))