複数のデータベースの操作ジャンゴ

1.プロジェクトディレクトリ

  アプリの2つがあるデータ

    

 

 

 

2.modelクラス

app02 / models.py

    私たちは[app_label =アプリケーション名]を使用したいの下に、次の例を各テーブルを複数のデータベースを使用する場合

クラスが公開(models.Model):
    名前= models.CharField(max_lengthを= 32) 電子メール= models.EmailField()


    デフ__str __(自己):
        リターン"app02%s"は%のself.nameの

    クラスのMeta:
    #app的名字 app_label = 'app02'

 3.settings文言

= {DATABASES 
    'デフォルト':{ 
        'ENGINE': 'django.db.backends.mysql'、
        'NAME': 'ORM'、データベース##の名前
        'USER': 'ルート'、
        'PASSWORD': '123456'、 MySQLデータベースインストール##、ルート・ユーザが入力したパスワード
        'ホスト': '127.0.0.1'、
    }、
    'mysql02' { 
        'ENGINE': 'django.db.backends.mysql'、
        'NAME':「orm02 」、データベース##の名前
        『ユーザー『:』ルート』、
        『パスワード『:』123456』、mysqlデータベースをインストールしたとき##、ユーザ入力rootのパスワード
        『HOST『:』127.0.0.1』、
    }、
} 

#複数のデータベース接続プール
DATABASE_ROUTERS = [「djangoser.database_router.DatabaseAppsRouter」] 
それに配置された接続プール対応#アプリ 
DATABASE_APPS_MAPPINGを= {
    'app01': 'デフォルト'、
    'app02': 'mysql02'

 同じディレクトリdatabase_router.py 4.追加

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(自己、モデル、**ヒント):
        "" ""ポイント全て読み出し特定のデータベースへの操作「」」。
        DATABASE_MAPPINGでmodel._meta.app_label場合: 
    デフdb_for_write(自己、モデル、**ヒント):
            リターンDATABASE_MAPPING [model._meta.app_label]
        戻りなし

        「特定のデータベースをポイントし、すべての書き込み操作。」「」「」
        DATABASE_MAPPINGでmodel._meta.app_label場合:
            戻りDATABASE_MAPPING [model._meta.app_label] 
        リターンなし

    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 IF = = db_obj2:
                trueを返し
            、他:
                リターン偽
        の戻りなし
 
    デフallow_syncdb(自己、デシベル、モデル): 
        "" "アプリは唯一の関連するデータベースに表示されていることを確認してください。" "" 

        もしDATABASE_MAPPING.values()内のdb:
            リターンDATABASE_MAPPING.get(model._meta.app_label)==デシベル
        DATABASE_MAPPINGでのelif model._meta.app_label:
            リターン偽
        リターンなし

    DEF allow_migrateは(自己、デシベル、app_label、モデル=なし、**ヒント):
        「」」
        必ず認証アプリは、 『auth_db』に表示されます確認し
        たデータベース。
        『』 「
        DATABASE_MAPPING.valuesでデシベル()の場合:
            リターンDATABASE_MAPPING。取得(app_label)==デシベル
        のelif app_label DATABASE_MAPPINGで:
            Falseを返す
        リターンなし

    ジャンゴ1.4#を- Djangoの1.6 
    デフallow_syncdb(自己、デシベル、モデル):
        ):""」アプリは唯一の関連するデータベースに表示されていることを確認してください。「」」

        DATABASE_MAPPING.valuesでデシベル(あれば):
            リターンDATABASE_MAPPING.get(model._meta.app_label)==デシベル
        のelif model._meta.app_label DATABASE_MAPPING中:
            リターン偽
        リターンなし

    #ジャンゴ1.7 -ジャンゴ1.11 
    デフallow_migrate(自己、デシベル、app_label、MODEL_NAME =なし、**ヒント):
        プリント(デシベル、app_label、MODEL_NAME、ヒント)
        であればDATABASE_MAPPING.valuesでデシベル():
            リターンDATABASE_MAPPING.get(app_label)==デシベル
        DATABASE_MAPPINGでのelif app_label:
            リターン偽
        戻りなし

 5.ファイル名を指定して実行

Pythonはmanage.py makemigrations 
データベースをロードするように指定--database 
Pythonは移行manage.pyの --database = app02を

おすすめ

転載: www.cnblogs.com/xzcvblogs/p/12310266.html