32

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

我尝试使用以下代码。

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

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

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

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

4

2 回答 2

39

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

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

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

此外,TRUNCATE无论如何都不能在 引用的表上工作ForeignKeys,这显着限制了使用。

于 2012-06-27T20:16:03.910 回答
8

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

SQLAlchemy 0.8.0b2 和 Python 2.7.3

于 2013-02-25T23:35:03.447 回答