2017-01-30 9 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 App用に適切なコンテンツタイプが生成されます。それから、上記のことが必要です。正しくテストしてください。 –

+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プロジェクトにグローバルメソッドを作成し、my_blogデータベースに接続してクエリデータを返すことです。対応するデータベーステーブルのdjangoモデルはありますか?はいの場合は、ルータを作成することができます。 – shashankqv

0

この目的でキーワード「使用」を使用できます。

​​3210

これ以外にも、カスタムdbルータを使用してリクエスト(READ/WRITE/UPDATE)をルーティングできます。

詳細については、https://docs.djangoproject.com/en/1.10/topics/db/multi-db/

+0

ありがとうございます。これも良いです! – Erika

関連する問題