Python 웹 프레임워크(django,flask)가 mysql 데이터베이스 읽기와 쓰기 분리를 실현하는 예시

읽기와 쓰기의 분리는 말 그대로 우리는 읽기와 쓰기 두 가지 조작을 분리하여 데이터의 접근 압력을 줄이고 높은 병행 문제를 해결할 수 있다.
그럼 오늘 파이썬 두 프레임워크로 이 읽기와 쓰기를 분리하는 작업을 하겠습니다.
1. Django 프레임워크 읽기와 쓰기 분리
Django는 읽기와 쓰기의 분리가 매우 간단합니다. 바로 settings.py에서 컴퓨터를 데이터베이스 프로필에 넣으면 됩니다.

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', #  ip
'PORT': 3306, #  port
'USER': 'django_master', #  
'PASSWORD': 'django_master', #  
'NAME': 'djangobase_master' #  
},
'slave': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3307,
'USER': 'django_slave',
'PASSWORD': 'django_slave',
'NAME': 'djangobase_slave'
}
}
프로젝트의 앱 파일에db_ 만들기route.py 파일은 파일에 데이터베이스 루트 클래스를 직접 정의하여 읽기와 쓰기를 구분합니다.

    """ """
    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
마지막으로 우리는 settings.py에 루트 설정을 쓰면 됩니다.

DATABASE_ROUTERS = ["app001.db_router.MasterSlaveDBRouter"]
Flask 프레임워크 읽기와 쓰기 분리
우선 Session 클래스를 사용자 정의하고 get_ 다시 쓰기bind 방법,self에 따라.flushing 읽기와 쓰기 동작을 판단하고 해당하는 데이터베이스를 선택하십시오.

from flask import Flask
from flask_sqlalchemy import SQLAlchemy, SignallingSession, get_state
from sqlalchemy import orm
  
  
class RoutingSession(SignallingSession):
  def get_bind(self, mapper=None, clause=None):
    state = get_state(self.app)
  
    #  
    if self._flushing: #   , 
      print(" ")
      return state.db.get_engine(self.app, bind='master')
    else: #  ,  
      print(' ')
      return state.db.get_engine(self.app, bind='slave')
사용자 정의 SQLAlchemy 클래스,create_ 다시 쓰기session 방법, 그리고 사용자 정의 Session 클래스를 사용합니다.

class RoutingSQLAlchemy(SQLAlchemy):
  def create_session(self, options):
    return orm.sessionmaker(class_=RoutingSession, db=self, **options)
다음은 앱 실례를 만들고 데이터베이스 감청 파일을 설정한 다음db 연결 대상을 만들면 됩니다.

app = Flask(__name__)
#  
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/demo'
#  
app.config['SQLALCHEMY_BINDS'] = {
  'master': "mysql://root:[email protected]:3306/demo",
  'slave': "mysql://root:[email protected]:8306/demo"
}
#     ,  
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
#  SQL 
app.config['SQLALCHEMY_ECHO'] = False
  
#  
db = RoutingSQLAlchemy(app)
그럼 이게 바로 Python의 읽기와 쓰기 분리 조작입니다. 배웠습니까?
이상은Python 웹 프레임워크(django,flask)가 mysql 데이터베이스 읽기와 쓰기 분리를 실현하는 예시의 상세한 내용입니다. 더 많은python MySQL 읽기와 쓰기 분리에 관한 자료는 저희 다른 관련 글에 주목하세요!

좋은 웹페이지 즐겨찾기