2015-05-25 30 views

回答

0

如果你有一個QuerySet可以使用db property檢索數據庫名稱:

>>> f = Item.objects.all() 
>>> f.db 
'default' 

如果你有模型實例(您評估查詢集),您可以查詢ModelState(請注意,這不是據可查,因此它可能在未來改變,不推薦作爲@Weier說使用的應用程序):

>>> f = Item.objects.all()[4] 
>>> f._state.db 
'default' 
+0

最好不要提供代碼實現的鏈接作爲參考。在Django文檔中沒有提到的任何東西都應該被認爲是私有API,並且不能在Django應用程序中使用。 – Weier

+0

您說得對,QuerySet.db記錄在案,而ModelState no。編輯 – fasouto

2

沒有在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。但是除非你有一個使用這個提示的自定義路由器類,否則你不需要提供當前的實例。

相關問題