Django 여러 데이터베이스 연결 및 읽기/쓰기 분리
구성 파일 수정
Django의 기본값은default이며, 형식에 따라 새로운 설정을 직접 추가합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db2': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
}
}
물론 기본 sqlite3을 사용하지 않으려면 mysql을 사용하려면 스스로 설정해야 합니다
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # ip
'PORT': 3306, # port
'USER': 'django', #
'PASSWORD': 'django', #
'NAME': 'djangobase' #
},
'slave': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 8306,
'USER': 'django_slave',
'PASSWORD': 'django_slave',
'NAME': 'djangobase_slave'
}
}
프로젝트 디렉토리의init__파일에 다음 코드를 추가하여 데이터 연결 방식을pymysql로 변경합니다
import pymysql
pymysql.install_as_MySQLdb()
데이터 설정을 수정한 후에 모델스에서 사용할 수 있습니다.py 파일에서 테이블을 만들면 데이터베이스 이전을 진행할 수 있습니다
python manage.py makemigrations # migrations
python manage.py migrate --database default #
python manage.py migrate --database db2 # ,
수동 읽기/쓰기 분리
데이터베이스 관련 조작을 만나면 수동으로 사용할 해당 데이터베이스를 지정해야 하기 때문에 여분의 설정을 할 필요가 없다. 그러나 데이터의 읽기와 쓰기 조작이 너무 빈번할 때 이 방법은 약간 번거롭다.
from django.shortcuts import render, HttpResponse
from app001 import models
# Create your views here.
def write(request):
models.User.objects.using('default').create(name=' ', pwd='123', phone=1234)
return HttpResponse(' ')
def read(request):
obj = models.User.objects.filter(id=1).using('db2').first()
return HttpResponse(' ')
자동 읽기 및 쓰기 분리
데이터베이스 루트를 설정하여 읽기 분리를 자동으로 실현하면 매번 읽기 전용 데이터베이스를 수동으로 지정할 필요가 없다.
프로젝트 app에서db 만들기router.py 파일, 그리고 이 파일에 데이터베이스 루트 클래스를 정의하여 읽기와 쓰기를 분리합니다. 이 클래스는 최대 네 가지 방법을 제공합니다. 각각:dbfor_read、db_for_write、allow_relation、allow_migrate, 다음은 세 개만 썼습니다.
데이터베이스 라우팅 클래스 정의
class MasterSlaveDBRouter(object):
""" """
def db_for_read(self, model, **hints):
""" """
return "slave"
def db_for_write(self, model, **hints):
""" """
return "default"
def allow_relation(self, obj1, obj2, **hints):
""" """
return True
Router 구성
settings에서.py에서 DATABASE 지정ROUTERS
DATABASE_ROUTERS = ["app001.db_router.MasterSlaveDBRouter"]
여러 데이터베이스 라우트를 지정할 수 있습니다. 예를 들어 읽기 작업의 경우 Django는 모든 라우팅의db 를 순환합니다.for_read () 방법 중 하나가 되돌아올 때까지 이 데이터베이스를 사용하여 현재 작업을 진행합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.