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

Sea*_*lus 83 python sqlalchemy 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
Run Code Online (Sandbox Code Playgroud)

Daz*_*all 126

试试delete:

models.User.query.delete()
Run Code Online (Sandbox Code Playgroud)

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

  • 删除后不要忘记提交。 (3认同)
  • 嗯,这对我有用,但只有在将其更改为以下内容之后:`models.User.query().delete()` (2认同)
  • 如果您使用的是Flask-SQLAlchemy,则尝试将User.query.delete()作为query对象,因为BaseQuery对象是不可调用的。经过测试和验证。 (2认同)

Ste*_*rta 82

DazWorrall的回答很明显.如果您的代码的结构与OP的结构不同,那么这可能是有用的变体:

num_rows_deleted = db.session.query(Model).delete()
Run Code Online (Sandbox Code Playgroud)

此外,不要忘记删除只有在提交之后才会生效,如此片段中所示:

try:
    num_rows_deleted = db.session.query(Model).delete()
    db.session.commit()
except:
    db.session.rollback()
Run Code Online (Sandbox Code Playgroud)


ana*_*thi 41

烧瓶的SQLAlchemy

#for all records
db.session.query(Model).delete()
db.session.commit()
Run Code Online (Sandbox Code Playgroud)

这里的DB是Flask-SQLAlchemy类的对象.它将从中删除所有记录,如果要删除特定记录,则filter在查询中尝试子句.恩.

#for specific value
db.session.query(Model).filter(Model.id==123).delete()
db.session.commit()
Run Code Online (Sandbox Code Playgroud)