您的位置:首页技术文章
文章详情页

Python web框架(django,flask)实现mysql数据库读写分离的示例

【字号: 日期:2022-07-05 08:09:52浏览:2作者:猪猪

读写分离,顾名思义,我们可以把读和写两个操作分开,减轻数据的访问压力,解决高并发的问题。

那么我们今天就Python两大框架来做这个读写分离的操作。

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’}}

在项目的app文件中创建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 Flaskfrom flask_sqlalchemy import SQLAlchemy, SignallingSession, get_statefrom 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)

接下来创建app实例,配置数据库的监听文件, 然后创建db连接对象就可以了。

app = Flask(__name__)# 设置数据库的连接地址app.config[’SQLALCHEMY_DATABASE_URI’] = ’mysql://root:mysql@192.168.105.134:3306/demo’# 设置数据库的绑定地址app.config[’SQLALCHEMY_BINDS’] = { ’master’: 'mysql://root:mysql@192.168.105.134:3306/demo', ’slave’: 'mysql://root:mysql@192.168.105.134:8306/demo'}# 设置是否追踪数据库变化 一般不会开启, 影响性能app.config[’SQLALCHEMY_TRACK_MODIFICATIONS’] = False# 设置是否打印底层执行的SQL语句app.config[’SQLALCHEMY_ECHO’] = False # 创建数据库连接对象db = RoutingSQLAlchemy(app)

那么这些就是Python的读写分离操作,你学会了吗?

以上就是Python web框架(django,flask)实现mysql数据库读写分离的示例的详细内容,更多关于python MySQL读写分离的资料请关注好吧啦网其它相关文章!

标签: Python 编程