Mysql SqlAlchemy使用ORM截断表

Mysql SqlAlchemy使用ORM截断表,mysql,orm,sqlalchemy,Mysql,Orm,Sqlalchemy,我一直在为我的应用程序使用orm,并尝试不使用sql,以避免在不同dbms之间更改时出现sql语法错误 目前我正在使用sqlite和mysql进行测试。我想删除一个我们可以使用的表: db.session.query(models.MyTable).delete() 不幸的是,此方法并没有真正“截断”表,因为它没有将自动增量的计数重置为0 SqlAlchemy orm中还有真正的截断吗?SqlAlchemydelete(…)方法被转换为SQLdelete FROMquery。此查询不会重置任何自

我一直在为我的应用程序使用orm,并尝试不使用sql,以避免在不同dbms之间更改时出现sql语法错误

目前我正在使用sqlite和mysql进行测试。我想删除一个我们可以使用的表:

db.session.query(models.MyTable).delete()

不幸的是,此方法并没有真正“截断”表,因为它没有将自动增量的计数重置为0

SqlAlchemy orm中还有真正的截断吗?

SqlAlchemy
delete(…)
方法被转换为SQL
delete FROM
query。此查询不会重置任何自动增量计数器。要在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__])

(对于用于删除表的替代sqlalchemy语法示例,请检查此项)

重置序列的需要是可疑的,为什么要这样做?我希望sqlite和mysql之间有相同的行为,因为对于sqlite,计数器似乎是重置的,而mysql则不是。重置序列更像是sqlite序列实现的一个缺陷,我认为这是一个错误!有时,人们出于测试目的将开发数据放入数据库中,然后想要截断表并再次执行。对我来说,这是重置计数器的合理时间。就像是“重来一遍”