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

时间:2013-05-15 19:51:31

标签: sqlalchemy flask flask-sqlalchemy

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

寻找这样的事情:

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

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

4 个答案:

答案 0 :(得分:116)

尝试delete

models.User.query().delete()

来自the docsReturns the number of rows deleted, excluding any cascades.

答案 1 :(得分:74)

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

答案 2 :(得分:34)

烧瓶SQLAlchemy的

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

答案 3 :(得分: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))