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を