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