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

Crystal ·
更新时间:2024-11-13
· 980 次阅读

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

那么我们今天就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 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)

接下来创建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 动态渲染 mysql 配置文件的示例Python操控mysql批量插入数据的实现方法使用Python操作MySQL的小技巧Python 连接 MySQL 的几种方法Python连接mysql方法及常用参数python如何操作mysqlPython连接mysql数据库及简单增删改查操作示例代码python连接mysql数据库并读取数据的实现Python使用pycharm导入pymysql教程Python批量删除mysql中千万级大量数据的脚本分享



web框架 Web 读写分离 示例 flask Django Python mysql数据库 Mysql

需要 登录 后方可回复, 如果你还没有账号请 注册新账号