複数のデータベース構成を接続するためのDjangoプロジェクト

1、データベース接続設定

PyMySQLをインストールするPIP

2、ディレクトリ内の同じ名前のプロジェクトには、myproject/myproject下に__init__.py次のコードを追加します

輸入pymysql 
pymysql.install_as_MySQLdb()

3、変更settings.pyデフォルトのデータベースを default

= DATABASES {
     ' デフォルト' :{
         ' ENGINE '' django.db.backends.mysql '#のデータベースエンジン
          ' NAME '' pythondms '#のデータベース名
          ' USER '' ルート'#のユーザ名
          ' PASSWORD '' '#のパスワード
          ' HOST '' 36.103.245.29 '#1 データベースホストは、デフォルトはlocalhost 
          ' PORT '' 3306 '#のデータベースポートが、MySQLのデフォルトは3306である
          ' OPTIONS ' {
              ' 自動コミット' :真、
         } 
    } 
}

4、マルチ接続構成データベース

データベース設定 
DATABASES = {
    ' デフォルト' :{
           ' ENGINE '' django.db.backends.mysql '#のデータベースエンジン
          ' NAME '' pythondms '#のデータベース名
          ' USER '' ルート'#のユーザ名
          ' PASSWORD '' '#のパスワード
          "ホスト'' 36.103.245.29 ' #1 データベースホストは、デフォルトはlocalhost 
          ' PORT '' 3306 ' #のデータベース・ポート、MySQLのデフォルトは3306である
          ' OPTIONS ' {
              ' 自動コミット' :真、
         } 
    }、
    ' デフォルト1の' :{
           ' エンジン'' django.db.backends.mysql '#のデータベースエンジン
          "NAME "' Pythondms '#のデータベース名
          ' USER '' ルート'#のユーザ名
          ' PASSWORD '' '#のパスワード
          ' HOST '' 39.107.35.95 '#のデータベースホストは、デフォルトではlocalhostです
          ' PORT '" 3306 "データベースポート、MySQLのデフォルトは3306に
          ' OPTIONS ' {
              ' 自動コミット' :真、
         } 
    } 
} 
DATABASE_ROUTERS = [ ' dms.database_router.DatabaseAppsRouter ' ] 
DATABASE_APPS_MAPPING = {
     ' userctrl '' デフォルト' ' app02 '' デフォルト1 ' 
}

ここでは、ルーティング・データベースで構成されdms.database_router.DatabaseAppsRouter、次いで、アプリ指定されたデータベースを指定します'userctrl': 'default', 'app02': 'default',今、私たちは、ディレクトリ内に同じ名前の、悲しいかなプロジェクトを必要とするmyproject/myproject新しいケースを作成するために、database_router.pyデータベースのルーティングを実装します。

# database_router.py
django.confのインポート設定

DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING 


クラスDatabaseAppsRouter(オブジェクト):
     「」」
    別のモデルのすべてのデータベース操作を制御するルータ
    。データベース

    アプリはsettings.DATABASE_APPS_MAPPINGに設定されていない場合、ルータは
    にフォールバックしますdefaultをデータベース。

    セッティング例:

    DATABASE_APPS_MAPPING = { 'APP1': 'DB1'、 'APP2': 'DB2'} 
    "" " 

    DEF db_for_read(自己、モデル、** ヒント
        ):""" 「ポイント全て読み出し特定のデータベースへの操作。「」」
        もしmodel._meta.app_label DATABASE_MAPPING:
             返すDATABASE_MAPPINGは[model._meta.app_label]
         返すなし

    デフ(自己、モデル、** db_for_writeない:ヒント)
         「」「ポイントは、すべての特定のデータベースへの書き込み操作を。『』」
        場合 model._meta .app_label DATABASE_MAPPING:
             戻る[model._meta.app_label] DATABASE_MAPPING
         返すなし

    デフ allow_relation(自己、OBJ1、OBJ2、** :ヒントを)
         "" " 同じデータベースを使用するアプリケーションとの間の関係を許可します"""
        db_obj1= DATABASE_MAPPING.get(obj1._meta.app_label)
        db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)
         場合 db_obj1 db_obj2:
             もし db_obj1 == db_obj2:
                 返す真の
             戻らないの戻りなし

    デフallow_syncdb(自己、デシベル、モデル):
         「」「アプリは唯一の関連するデータベースに表示されていることを確認してください『』」

        もしデシベルDATABASE_MAPPING.values():
             リターンDATABASE_MAPPING.get(model._meta.app_label)== デシベル
         のelif model._meta.app_label DATABASE_MAPPING:
             戻らないの戻りなし

    デフ(自己、デシベル、app_label、モデル=なし、** allow_migrate ヒント
        ):""」
        確認してください認証アプリは唯一の'auth_db'に表示され
        たデータベース
        ""」
        場合デシベル)DATABASE_MAPPING.values(:
             戻る DATABASE_MAPPING.get(app_label)== デシベル
         のelif app_label DATABASE_MAPPINGを:
             リターンリターンなし

    ジャンゴ1.4 - Djangoの1.6 
    デフallow_syncdb(自己、デシベル、モデル):
         「」「アプリは唯一の関連するデータベースに表示されていることを確認してください。『』」
 
        もしデシベル:DATABASE_MAPPING.values()
             を返す DATABASE_MAPPING.get (model._meta.app_label)== デシベル
         のelif model._meta.app_label DATABASE_MAPPING:
             返すFalseの
         戻りなし
 
    ジャンゴ1.7 -ジャンゴ1.11 
    デフ allow_migrate(自己、デシベル、app_label、MODEL_NAME =なし、** ヒント):
        #の印刷デシベル、app_label、MODEL_NAME、ヒント
        場合デシベルDATABASE_MAPPING.values():
             返す DATABASE_MAPPING.get(app_label)== デシベル
         のelif app_label DATABASE_MAPPINGを:
             返さないの戻りなし
            

我々は別のアプリを使って別のデータベースを達成するように、私たちが使用できるpython manage.py migrate --database=mysql02データベースの同期を達成するためのコマンドを(テーブルの作成)

おすすめ

転載: www.cnblogs.com/xcsg/p/11446990.html