我一直在为我的应用程序使用orm,并尽量避免使用sql,以避免在不同的dbms之间更改时出现sql语法错误。
目前我正在测试sqlite和mysql。 我发现要删除表,我们可以使用:
db.session.query(models.MyTable).delete()
不幸的是,这种方法并没有真正“清空”表,因为它没有将自增计数器重置为0。
是否有办法在SqlAlchemy orm中执行真正的truncate操作?
我一直在为我的应用程序使用orm,并尽量避免使用sql,以避免在不同的dbms之间更改时出现sql语法错误。
目前我正在测试sqlite和mysql。 我发现要删除表,我们可以使用:
db.session.query(models.MyTable).delete()
不幸的是,这种方法并没有真正“清空”表,因为它没有将自增计数器重置为0。
是否有办法在SqlAlchemy orm中执行真正的truncate操作?
SQLAlchemy的delete(...)
方法被翻译为SQL的DELETE FROM
查询。这个查询不会重置任何AUTO_INCREMENT计数器。要在MySQL中重置计数器,你需要运行像这样的查询:
ALTER TABLE tbl AUTO_INCREMENT = 100;
由于没有truncate()
操作,SQLAlchemy中删除表中所有条目并重置自增计数的简单解决方法是像这样删除并重新创建表:
Base.metadata.drop_all(engine, tables=[YourTable.__table__])
Base.metadata.create_all(engine, tables=[YourTable.__table__])