2017-01-28 40 views
0

我有和ORM應用程序使用SQLAlchemy,Alembic遷移和Pytest進行測試。在我的測試中,我有一個數據庫作爲夾具。過去,在我使用遷移之前,我刪除了所有表併爲每個測試會話重新創建它們。在單元測試SQLAlchemy應用程序中使用Alembic?

現在,我使用的遷移,我想用蒸餾器中創建我的燈具也因爲我相信,模擬生產環境更加緊密。(這是一個好理由?)

一種方式來做到這一點是到downgrade()一路下降,upgrade()每次上升。我不太喜歡這個。我可能錯了。

另一個辦法是drop_all()create_all()單元測試,並且只寫另一個測試郵票頭數據庫,並測試一個upgradedowngrade

是否有另一種好的/標準的方式來整合遷移與燈具,所以我不必使用drop_tables

或者有沒有辦法在drop_tables之後戳db爲「tail」還是空的?如果沒有明確使用版本0的遷移哈希,會導致創建依賴關係,如alembic downgrade -1,這將使其回到第0年。謝謝。

回答

1

我建議每次啓動一個臨時數據庫實例,例如,與testing.mysqldtesting.postgresql。這種方法的優點是你可以保證每次都重新開始;您的測試成功與否取決於外部因素。缺點是啓動實例需要花費太多的時間。

如果你堅持使用現有的數據庫實例,你可以像你說的那樣使用create_all() + alembic stamp head。但是,不要執行drop_all(),而只需刪除整個數據庫(或PostgreSQL中的模式)並重新創建它。

如果您堅持使用drop_all(),您可以刪除alembic_version表,告訴alembic當前版本是「尾」。

+0

謝謝。 'testing.psql'的問題是,它需要psql來啓動一個臨時實例,我的環境是容器化的,我的數據庫在另一個容器中,而我的orm容器中沒有psql。我不想拉pg進去它,所以我最後打了個尾巴 – plumSemPy

+0

未來的參考文獻:'alembic降級基地' http://alembic.zzzcomputing.com/en/latest/tutorial.html#downgrading – plumSemPy

相關問題