我一直在为我的应用程序使用orm,并且在不同dbms之间切换时尽量不要使用sql以避免sql语法错误。
目前我正在使用 sqlite 和 mysql 进行测试。我想删除一个我们可以使用的表:
db.session.query(models.MyTable).delete()
不幸的是,这种方法并没有真正“截断”表格,因为它不会将自动增量的计数重置为 0。
无论如何要在 SqlAlchemy orm 中进行真正的截断?
我一直在为我的应用程序使用orm,并且在不同dbms之间切换时尽量不要使用sql以避免sql语法错误。
目前我正在使用 sqlite 和 mysql 进行测试。我想删除一个我们可以使用的表:
db.session.query(models.MyTable).delete()
不幸的是,这种方法并没有真正“截断”表格,因为它不会将自动增量的计数重置为 0。
无论如何要在 SqlAlchemy orm 中进行真正的截断?
SQLAlchemydelete(...)
方法被翻译成 SQLDELETE FROM
查询。此查询不会重置任何 AUTO_INCREMENT 计数器。要重置 MySQL 中的计数器,您必须运行如下查询:
ALTER TABLE tbl AUTO_INCREMENT = 100;
如果我没记错的话,它在 SQLAlchemy 中没有类似物。
由于没有truncate()
操作,sqlalchemy 中用于从表中删除所有条目并重置自动增量计数的简单解决方法是删除并重新创建表,如下所示:
Base.metadata.drop_all(engine, tables=[YourTable.__table__])
Base.metadata.create_all(engine, tables=[YourTable.__table__])
(有关删除表的替代 sqlalchemy 语法示例,请查看此stackoverflow 帖子)