如何清理数据库,使用sqlalchemy删除所有记录?

Rak*_*esh 26 python sqlalchemy

我正在使用SQlAlchemy.我想删除有效存在于数据库中的所有记录,但我不想删除表/数据库.

我尝试使用以下代码.

con = engine.connect()
trans = con.begin()

con.execute(table.delete())
trans.commit()
Run Code Online (Sandbox Code Playgroud)

看起来,它不是非常有效的,因为我迭代数据库中存在的所有表.有人可以建议我这样做更好,更有效吗?

任何形式的帮助在这里都非常感激.

van*_*van 31

如果模型依赖于现有的数据库模式(通常使用autoload=True),则无法避免删除每个表中的数据.MetaData.sorted_tables派上用场:

for tbl in reversed(meta.sorted_tables):
    engine.execute(tbl.delete())
Run Code Online (Sandbox Code Playgroud)

如果你的模型确实定义了完整的模式,那么没有什么比drop_all/ 更简单create_all(正如@jadkik94已经指出的那样).

此外,TRUNCATE无论如何不会对被引用的表起作用ForeignKeys,这显着地限制了使用.

  • 如果你没有定义绑定到这个`meta`的模型,就没有任何东西.但如果您不想定义模型,并希望从数据库中"反映"它们,则需要调用[`MetaData.reflect`](http://docs.sqlalchemy.org/en/rel_0_7/core/ schema.html#sqlalchemy.schema.MetaData.reflect)首先 (4认同)

chi*_*ffa 8

对我来说,tbl.drop(engine)工作,但不是engine.execute(tbl.delete())

SQLAlchemy 0.8.0b2和Python 2.7.3