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

时间:2012-06-27 18:53:23

标签: python sqlalchemy

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

我尝试使用以下代码。

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

con.execute(table.delete())
trans.commit()

看起来,它不是非常有效的,因为我正在迭代数据库中存在的所有表。 有人可以建议我采用更好,更有效的方法吗?

任何形式的帮助都非常感谢。

1 个答案:

答案 0 :(得分:29)

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

for tbl in reversed(meta.sorted_tables):
    engine.execute(tbl.delete())

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

此外,TRUNCATE无论如何都不会对ForeignKeys引用的表格起作用,这会大大限制使用量。