2013-05-17 355 views
0

我想就我遇到的問題提出一個問題,並且我缺乏經驗,我不確定這是否是最佳選擇。從其他數據庫獲取數據

目前我們已經在我們的服務器中安裝了「OCS庫存報告」,它保持我們擁有的所有計算機的更新清單。 我們的意圖是使用這些數據在我們的django管理網站上查看。 首先,我將在ouer應用程序中創建所有模型。 在管理站點中創建計算機並保存時,OCS數據庫中的信息將被導入到另一個數據庫。

我不知道這是否是最好的方法。 我不知道django提供的所有可能性。 每次創建新對象時導入數據會很有效? 在管理界面中顯示信息而不將其導入到我的應用程序並直接攻擊其他數據庫的機會? (對不起我的英文不好)

+0

有什麼問題嗎?你需要更具體地瞭解你的問題?您是問如何使用多個數據庫,或者如何手動將行插入到單獨的數據庫中? –

回答

1

我假設你想Django管理只准備了OCS數據庫。

首先你需要在數據庫中的設置定義外部數據庫:

DATABASES = { 
    'default': { 
     ... django db settings here ... 
    }, 
    'ocs_db': { 
     'ENGINE': 'django.db.backends.mysql', 
     'OPTIONS': { 
      'read_default_file': '/path/to/my.cnf', 
     }, 
    } 
} 

你可以給python manage.py inspectdb --database ocs_db一試; inspectdb查找數據庫上的表並將模型定義轉儲爲python模塊。 如果這不起作用,那麼你必須手動完成。

那麼你一定要Django的不是管理該表(所以沒有行會被刪除,並且對錶中沒有操作會做),你可以做到這一點通過元管理選項。

我建議你寫一個基類使用此選項(最終其他的定製你需要的所有OCS型號)。

class OCSBaseModel(models.Model): 

    def save(self): 
     """ 
     avoid inserts/edits from model 
     """ 
     return 

    class Meta(): 
     abstract = True 
     managed = False 


class Workstation(OCSBaseModel): 
    ... 

作爲最後一步,您需要指示Django爲OCS模型使用正確的數據庫。

爲此,您需要編寫一個數據庫路由器作爲記錄here

或實現OCS車型的Django模型管理器,每個查詢集到數據庫中標記。 例如。

class OCSModelManager(models.Manager): 
    def get_query_set(self): 
     return super(OCSModelManager, self).get_query_set().using('ocs_db') 

請注意,我沒有測試此代碼的任何;)

+0

真棒,謝謝! – Blainn