我正在使用 SQLAlchemy。我想有效地删除数据库中存在的所有记录,但我不想删除表/数据库。
我尝试使用以下代码。
con = engine.connect()
trans = con.begin()
con.execute(table.delete())
trans.commit()
看起来,这不是一个非常有效的方法,因为我正在迭代数据库中存在的所有表。有人可以建议我这样做更好更有效的方法吗?
任何形式的帮助都非常感谢这里。
我正在使用 SQLAlchemy。我想有效地删除数据库中存在的所有记录,但我不想删除表/数据库。
我尝试使用以下代码。
con = engine.connect()
trans = con.begin()
con.execute(table.delete())
trans.commit()
看起来,这不是一个非常有效的方法,因为我正在迭代数据库中存在的所有表。有人可以建议我这样做更好更有效的方法吗?
任何形式的帮助都非常感谢这里。
如果您的模型依赖于现有的数据库模式(通常使用autoload=True
),则无法避免删除每个表中的数据。MetaData.sorted_tables
派上用场:
for tbl in reversed(meta.sorted_tables):
engine.execute(tbl.delete())
如果您的模型确实定义了完整的模式,那么没有比drop_all
/更简单的了create_all
(正如 @jadkik94 已经指出的那样)。
此外,TRUNCATE
无论如何都不能在 引用的表上工作ForeignKeys
,这显着限制了使用。
对我来说,投入tbl.drop(engine)
工作,但不是engine.execute(tbl.delete())
SQLAlchemy 0.8.0b2 和 Python 2.7.3