我正在構建一個Django支持的站點,我想爲某些應用程序分別創建數據庫,我構建了一個將每個應用程序路由到預定義數據庫的靈活路由器,此工作正常。 問題是,當我遷移我的模型時,我必須每次都設置--database
參數,我覺得這很煩人和冗餘。還有很多次,我用遷移應用程序的表填充了我的默認數據庫(通過忘記添加--database
)。 我在我的路由器中用allow_migrate(...)
函數進行了實驗,但是我所能實現的只是安全機制,如果我忘記指定數據庫,將無法運行遷移。 我的問題是:有沒有一種方法可以爲Django中的模型遷移設置自動數據庫選擇? 我的方法可能是錯的,這令我感到驚訝,以前似乎沒有人做過。在Django中遷移的自動數據庫路由器
2
A
回答
1
我不知道有什麼辦法自動做到這一點。但是,一個簡單的方法可能是migrate
命令的write your own version命令通過適當的--database
和應用程序參數多次調用Django migrate
命令。
根據Django遷移的作者,這是a conscious design decision,所以我不希望它改變:「就像syncdb一樣,遷移一次只能在一個數據庫上運行,因此您必須單獨爲每個數據庫執行它,正如你所建議的那樣,這是設計的。「
2
對於任何人面臨我是有問題的,這裏是我最終選擇:
routers.py:
from django.conf import settings
class DatabaseAppsRouter(object):
def db_for_read(self, model, **hints):
# your db routing
def db_for_write(self, model, **hints):
# your db routing
def allow_relation(self, obj1, obj2, **hints):
# your db routing
def allow_syncdb(self, db, model):
# your db routing
def allow_migrate(self, db, app_label, model_name=None, **hints):
if db in settings.DATABASE_APPS_MAPPING.values():
return settings.DATABASE_APPS_MAPPING.get(app_label) == db
elif app_label in settings.DATABASE_APPS_MAPPING:
return False
settings.py
DATABASE_ROUTERS = ['project.routers.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {'contenttypes': 'default',
'auth': 'default',
'admin': 'default',
'sessions': 'default',
'messages': 'default',
'staticfiles': 'default',
'myapp': 'mydb',
}
這個設置讓我可以運行兩個com mands:
python manage.py migrate
python manage.py migrate --database=mydb
這仍然是一個很多,但至少現在我不能錯誤地遷移到MYAPP即發生多次,我要承認的默認數據庫。
警告 - 咆哮:
到現在爲止,我發現Django的設計是quircky但非常合乎邏輯和程序員友好,像Python本身。但是,遷移與多個數據庫設置交互的方式實際上很不方便,因此很容易將缺省數據庫氾濫到不需要的表中。 凱文在他的回答中提到的討論表明,我不是唯一有這種困難的人。
相關問題
- 1. Django數據庫路由器
- 2. Django數據庫遷移
- 3. django手動數據庫遷移
- 4. django生產中的數據庫遷移
- 5. Django - 數據遷移+數據庫轉儲
- 6. 從django遷移中排除數據庫
- 7. Django中的數據遷移
- 8. 自動遷移VS代碼庫遷移
- 9. Django遷移數據庫列順序
- 10. Django遷移與多個數據庫
- 11. Django數據庫掛起遷移
- 12. Django的pytest數據遷移
- 13. 遷移數據的Django南
- 14. 在Django中移動默認路由器的API根目錄
- 15. 試圖從路由器遷移到鐵路由器
- 16. 數據庫遷移
- 17. 數據庫遷移
- 18. 數據庫遷移
- 19. 數據庫遷移
- 20. 在軌數據庫遷移
- 21. Rails的 - 從數據庫中自動生成遷移改變
- 22. 如何在django 1.9+中合併連續的數據庫遷移?
- 23. 數據庫數據遷移
- 24. Django 1.8將本地postgres數據庫遷移到heroku數據庫
- 25. EF遷移:自動遷移中的RenameColumn?
- 26. 遷移反應路由器v3到v4
- 27. Angular2路由器與站點遷移
- 28. Flyway未在數據庫/遷移中找到我的sql遷移
- 29. WordPress的數據庫遷移
- 30. 數據遷移從自定義數據庫中的Drupal 7
感謝您對本主題的討論鏈接,似乎db/migrations子系統的設計不支持我的首選解決方案。我會嘗試你的建議。 – Raff89