我正在與多個數據庫的Django項目工作,我正在尋找一種方法來獲取當前數據庫別名使用導入或方法。Django - 有一種獲取當前數據庫別名的方法嗎?
我一直在搜索的文檔,但我還沒有找到任何有用的信息。
我正在與多個數據庫的Django項目工作,我正在尋找一種方法來獲取當前數據庫別名使用導入或方法。Django - 有一種獲取當前數據庫別名的方法嗎?
我一直在搜索的文檔,但我還沒有找到任何有用的信息。
如果你有一個QuerySet可以使用db property檢索數據庫名稱:
>>> f = Item.objects.all()
>>> f.db
'default'
如果你有模型實例(您評估查詢集),您可以查詢ModelState(請注意,這不是據可查,因此它可能在未來改變,不推薦作爲@Weier說使用的應用程序):
>>> f = Item.objects.all()[4]
>>> f._state.db
'default'
沒有在Django的「當前」數據庫別名正是這樣的事情。
看一看的文檔的數據庫路由器理解爲什麼:
https://docs.djangoproject.com/en/1.8/topics/db/multi-db/#database-routers
(雖然@fasouto不正確顯示「當前」的別名,在特定型號的讀操作的情況下,通過使用私有的QuerySet
API)
試試這個:
from django.db import router
alias_for_read = router.db_for_read(MyModelClass)
# optionally:
alias_for_read = router.db_for_read(MyModelClass, instance=my_model_instance)
# similarly:
alias_for_write = router.db_for_write(MyModelClass)
alias_for_write = router.db_for_write(MyModelClass, instance=my_model_instance)
關於instance
參數...規格爲DB路由器班說,他們應該接受**hints
克瓦格斯。他們還表示目前只支持提示instance
。但是除非你有一個使用這個提示的自定義路由器類,否則你不需要提供當前的實例。
最好不要提供代碼實現的鏈接作爲參考。在Django文檔中沒有提到的任何東西都應該被認爲是私有API,並且不能在Django應用程序中使用。 – Weier
您說得對,QuerySet.db記錄在案,而ModelState no。編輯 – fasouto