2017-01-30 82 views
0

因此,例如,以下是在我的settings.py文件中設置的數據庫。Django MySQL在不同的數據庫上

DATABASES = { 
    'default': { 
     'NAME': 'app_data', 
     'ENGINE': 'django.db.backends.postgresql', 
     'USER': 'postgres_user', 
     'PASSWORD': 's3krit' 
    }, 
    'my_blog': { 
     'NAME': 'my_blog', 
     'ENGINE': 'django.db.backends.mysql', 
     'HOST': '192.168.1.40', 
     'USER': 'mysql_user', 
     'PASSWORD': 'priv4te' 
    } 
} 

我需要從my_blog數據庫中獲取一些信息。 我沒有寫入這個數據庫的權限,我只需要執行簡單的select查詢。 你如何建議我這樣做?

回答

0

當你使用多個數據庫時,你需要做的是爲你正在做的查詢改變數據庫路由規則。

您可以在這裏閱讀更多。 https://docs.djangoproject.com/en/1.10/topics/db/multi-db/

class MyBlogRouter(object): 
    """ 
    A router to control all database operations on models in the 
    auth application. 
    """ 
    def db_for_read(self, model, **hints): 
     """ 
     Attempts to read blog models go to my_blog. 
     """ 
     if model._meta.app_label == 'my_blog': 
      return 'my_blog' 
     return None 

而在你的settings.py

DATABASE_ROUTERS = ['path.to.MyBlogRouter',] 
+0

,我應該怎麼寫我的模型,例如? – Erika

+0

模型及其字段應包含從數據庫結構中拾取的模式結構。一旦你完成了。你需要爲它創建一個虛假的遷移。以便爲您的Django應用程序生成適當的內容類型。然後上面應該做到這一點。正確測試。 –

+0

是的,我得到它正常工作。 – Erika

0

請在數據獲取的實現做以下。

from django.db import connections 

cursor = connections['my_blog'].cursor() 
cursor.execute('yourquery') 
data = cursor.fetchall() # fetches all rows 
data = cursor.fetchone() # fetches one row 
+0

謝謝,這個也可以。仍然試圖找到最好的方式。 – Erika

+0

這對於我應該使用複雜的連接查詢時會有所幫助,我想。 – Erika

+0

當你說,你沒有對數據庫的寫入權限意味着你不打算在該數據庫上使用django模型創建表。另外,我不會建議編寫一個數據庫路由器,因爲您只會將它用於SELECT查詢。你可以做的是在你的Django項目中編寫一個Global方法,它將連接到my_blog數據庫並返回查詢數據。你有相應的數據庫表的Django模型?如果是的話,那麼你可以寫一個路由器。 – shashankqv