3
爲什麼Django允許您重置postgres和其他DBMS的序列(AutoID)字段,但不是SQLite3?爲什麼Django在SQLite3中不重置序列?
看在django/db/backends/sqlite3/base.py
的sql_flush
方法的源代碼,有一個評論,說:
注:自動遞增的指數復位無要求(參見其他sql_flush()實現)。只需返回SQL在這一點
我有幾個測試,我加載夾具文件,取決於絕對主鍵ID。由於Django不重置SQLite的自動ID字段,因此這些設備無法正確加載。
看來,它是有點微不足道在sqlite的自動ID列復位:How can I reset a autoincrement sequence number in sqlite
聽起來像是你的測試被打破,然後。沒有什麼應該取決於絕對ID。 –
@DanielRoseman是的,大家都知道這不是最佳做法。事實上,在測試中很容易質疑加載裝置的使用。這就是爲什麼像FactoryGirl這樣的東西存在。但是,在這種情況下,這是一個完美的解決方案。 Django文檔指定在測試用例中使用重置序列https://docs.djangoproject.com/en/1.5/topics/testing/overview/#django.test.TransactionTestCase.reset_sequences。即使他們提到這是一個壞主意。然而,我的問題是:即使這是一個壞主意,爲什麼他們不支持sqlite? –
我不知道sqlite支持序列重寫的方式與Oracle所說的相同。例如,我發現當我清空相關表時,sqlite Auto Integer主鍵會重置。我知道在Oracle下,Auto ID序列作爲一個完全獨立的實體存在,可以獨立重置。 –