Django 다중 데이터베이스 연결 구현 방법 분석
직접 간단한 방법을 제시하세요. 공식 강좌에 대해 더 알고 싶으면 클릭하세요여기
코드
1. 앱마다 데이터베이스를 따로 설정할 수 있다
settings.py에는 데이터베이스에 대한 설정이 있고 기본 데이터베이스 default가 있습니다. 우리는 다른 것을 추가할 수 있습니다. 예를 들어 다음과 같습니다.
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db1': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbname1',
'USER': 'your_db_user_name',
'PASSWORD': 'yourpassword',
"HOST": "localhost",
},
'db2': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbname2',
'USER': 'your_db_user_name',
'PASSWORD': 'yourpassword',
"HOST": "localhost",
},
}
# use multi-database in django
# add by WeizhongTu
DATABASE_ROUTERS = ['project_name.database_router.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {
# example:
#'app_name':'database_name',
'app1': 'db1',
'app2': 'db2',
}
프로젝트에서_name 폴더에 데이터베이스 저장_router.py 파일, 내용은 다음과 같습니다.
# -*- coding: utf-8 -*-
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
# for Django 1.4 - Django 1.6
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
# Django 1.7 - Django 1.11
def allow_migrate(self, db, app_label, model_name=None, **hints):
print db, app_label, model_name, hints
if db in DATABASE_MAPPING.values():
return DATABASE_MAPPING.get(app_label) == db
elif app_label in DATABASE_MAPPING:
return False
return None
이렇게 하면 지정된 앱이 지정한 데이터베이스를 사용하는 것을 실현할 수 있다. 물론 너도 여러 개의 qlite3를 함께 사용할 수 있다. 이것은 모든 앱에 단독으로 데이터베이스를 설정할 수 있는 것과 같다!설정하지 않거나 설정하지 않은 앱은 자동으로 기본 데이터베이스를 사용합니다.2. 지정된 데이터베이스를 사용하여 작업 수행
검색된 문장 뒤에 using (dbname) 을 사용하여 조작할 데이터베이스를 지정하면 됩니다
# 질의
YourModel.objects.using('db1').all()
아니면 Your Model.objects.using('db2').all()
# 저장 또는 삭제
user_obj.save(using='new_users')
user_obj.delete(using='legacy_users')
3. 여러 데이터베이스 연결 시 데이터 가져오기 내보내기
사용할 때와 데이터베이스의 차이점은 다음과 같습니다.
defalut (기본 데이터베이스) 가 아니라면 명령 뒤에 --database = 데이터베이스에 대응하는 settings를 추가합니다.py의 이름은 다음과 같습니다. --database=db1 또는 --database=db2
데이터베이스 동기화(테이블 만들기)
# Django 1.6 및 다음 버전
python manage.pysyncdb#기본 데이터베이스 동기화, 원래와 다름 없음
# 동기화 데이터베이스db1 (주의: 데이터베이스 이름이 아니라db1,settings.py에 있는db1입니다. 하지만 이 두 이름을 같게 해서 사용하기 쉽습니다)
python manage.py syncdb --database=db1
# Django 1.7 이상 버전
python manage.py migrate --database=db1
데이터 내보내기
python manage.py dumpdata app1 --database=db1 > app1_fixture.json
python manage.py dumpdata app2 --database=db2 > app2_fixture.json
python manage.py dumpdata auth > auth_fixture.json
데이터베이스 가져오기
python manage.py loaddata app1_fixture.json --database=db1
python manage.py loaddata app2_fixture.json --database=db2
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.