この記事の内容は、pythonで複数のデータベースを操作するdjangoの方法(コード)に関するもので、一定の参考価値がありますので、困っている方は参考にしていただければ幸いです。
1. データベース ルーティング配布ファイルの追加
プロジェクト フォルダーに「database_router」ファイルを作成します。次のコードをこのファイルにコピーします。
from django.conf import settings DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING class DatabaseAppsRouter(object): """ A router to control all database operations on models for different databases. In case an app is not set in settings.DATABASE_APPS_MAPPING, the router will fallback to the `default` database. Settings example: DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'} """ def db_for_read(self, model, **hints): """"Point all read operations to the specific database.""" if model._meta.app_label in DATABASE_MAPPING: return DATABASE_MAPPING[model._meta.app_label] return None def db_for_write(self, model, **hints): """Point all write operations to the specific database.""" if model._meta.app_label in DATABASE_MAPPING: return DATABASE_MAPPING[model._meta.app_label] return None def allow_relation(self, obj1, obj2, **hints): """Allow any relation between apps that use the same database.""" db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label) db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label) if db_obj1 and db_obj2: if db_obj1 == db_obj2: return True else: return False return None def allow_syncdb(self, db, model): """Make sure that apps only appear in the related database."" if db in DATABASE_MAPPING.values(): return DATABASE_MAPPING.get(model._meta.app_label) == db elif model._meta.app_label in DATABASE_MAPPING: return False return None def allow_migrate(self, db, app_label, model=None, **hints): """ Make sure the auth app only appears in the 'auth_db' database. """ if db in DATABASE_MAPPING.values(): return DATABASE_MAPPING.get(app_label) == db elif app_label in DATABASE_MAPPING: return False return None
2. settings.py ファイルで複数のデータベースを構成します
# Database # https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_test', 'HOST': '127.0.0.1', 'USER': 'root', 'PASSWORD': '123456', 'PORT': '3306', }, #配置第二个数据库 'test': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xsanjiaocheng', 'HOST': '127.0.0.1', 'USER': 'root', 'PASSWORD': '123456', 'PORT': '3306', } }
#データベースのルーティングを設定し、django_test を使用する名前に変更します。プロジェクト 。
#DATABASE_ROUTERS = ['django_test.database_router.DatabaseAppsRouter']#データベースとアプリ間の対応関係を構成します#DATABASE_APPS_MAPPING = { # example: # 'app_name':'database_name', # 'app01': 'test', 'app01': 'default', 'app02': 'test', }
models.py:
class django_test_1(models.Model): abc = models.CharField(max_length=20) class Meta: app_label='app01' app02中的models.py: class test_1(models.Model): tests= models.CharField(max_length=20)
前と同じ: python manage.py makemigrations
5. データベースの移行移行時にデータベース名を指定する必要があります
python manage.py migrate database=test
既に作成されたデータベースに対応する models.py ファイルを作成する場合の場合、移行ファイルを生成する必要はなく、「python manage.py Inspectiondb > app02/models.py --database=test」コマンドを直接実行するだけです。
6. 操作データベース1) データベースを手動で選択します
django_test_1.objects.using('default').create(abc='hdajh')
2) データベースを自動的に選択します
以前と同様に using() は追加されません。
7. urls.py を設定しますアプリに対応する views.py ファイルをインポートします。エイリアスを付けるか、views.py ファイルの名前を変更することをお勧めします。
その他の使用方法は以前と同じです。
以上がPythonのDjangoで複数のデータベースを操作する方法(コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。