我正在使用SQlAlchemy。我想删除有效存在于数据库中的所有记录,但我不想删除表/数据库。
我尝试使用以下代码。
con = engine.connect()
trans = con.begin()
con.execute(table.delete())
trans.commit()
看起来,它不是非常有效的,因为我正在迭代数据库中存在的所有表。 有人可以建议我采用更好,更有效的方法吗?
任何形式的帮助都非常感谢。
答案 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
引用的表格起作用,这会大大限制使用量。