>  기사  >  백엔드 개발  >  Python에서 Django를 사용하여 여러 데이터베이스를 작동하는 방법(코드)

Python에서 Django를 사용하여 여러 데이터베이스를 작동하는 방법(코드)

不言
不言원래의
2018-09-17 16:45:441415검색

이 글의 내용은 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 파일에 정상적으로 데이터 테이블을 생성합니다( in 테이블 생성 시 동일한 테이블 이름을 사용하지 마세요.)

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 prepare.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.