ホームページ > バックエンド開発 > Python チュートリアル > PythonのDjangoで複数のデータベースを操作する方法(コード)

PythonのDjangoで複数のデータベースを操作する方法(コード)

不言
リリース: 2018-09-17 16:45:44
オリジナル
1434 人が閲覧しました

この記事の内容は、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',
}
ログイン後にコピー

3. 対応するアプリの models.py ファイルに通常通りデータ テーブルを作成します (テーブルの作成時に同じテーブル名を使用しないようにしてください) app01 の

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)
ログイン後にコピー

4. 移行ファイルの生成

前と同じ: 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート