122

如何使用 Flask-SQLAlchemy 删除单个表中的所有行?

寻找这样的东西:

>>> users = models.User.query.all()
>>> models.db.session.delete(users)

# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
4

4 回答 4

170

尝试delete

models.User.query.delete()

文档Returns the number of rows deleted, excluding any cascades.

于 2013-05-15T19:55:30.867 回答
124

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()
于 2014-08-21T19:28:23.480 回答
75

Flask-Sqlalchemy

删除所有记录

#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

于 2016-07-13T07:06:38.690 回答
0

编写原始 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))
于 2021-08-05T11:16:43.383 回答