2012-11-28 66 views
7

我一直在使用orm作爲我的應用程序,並且儘量不要使用sql來避免在不同dbms之間更改時出現sql語法錯誤。使用ORM的SqlAlchemy截斷表

目前我正在用sqlite和mysql進行測試。我想通了,刪除表中我們可以使用:

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

不幸的是這種方法並沒有真正「截斷」表,因爲它不會自動遞增的計數重置爲0。

有無論如何做在SqlAlchemy orm真正的截斷?

+1

需要重置序列是可疑的,爲什麼你想要這個? – SingleNegationElimination

+0

我想要sqlite和mysql之間的相同行爲,因爲它似乎是sqlite的計數器重置,而mysql不是。 – w00d

+0

重置序列更多的是sqlite序列實現的缺陷,我認爲它是一個bug! – SingleNegationElimination

回答

1

SQLAlchemy delete(...)方法被翻譯成SQL DELETE FROM查詢。此查詢不會重置任何AUTO_INCREMENT計數器。要重置MySQL中的計數器,你必須運行這樣一個查詢:

ALTER TABLE tbl AUTO_INCREMENT = 100; 

如果我沒有弄錯,它在SQLAlchemy中沒有模擬。