Python实现自定义读写分离代码实例


Posted in Python onNovember 16, 2019

这篇文章主要介绍了Python实现自定义读写分离代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

思路

  • 自定义Session类
    • 重写get_bind方法
    • 根据self._flushing判断读写操作, 选择对应的数据库
  • 自定义SQLAlchemy类
    • 重写create_session, 在其中使用自定义的Session类
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')


class RoutingSQLAlchemy(SQLAlchemy):
  def create_session(self, options):
    return orm.sessionmaker(class_=RoutingSession, db=self, **options)


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)

# 用户表 一
class User(db.Model):
  __tablename__ = 't_user'
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(20), unique=True)


@app.route('/')
def index():
  # 增加数据
  user1 = User(name='zs')
  db.session.add(user1)
  db.session.commit()

  # 查询数据
  users = User.query.all()
  print(users)
  return "index"

if __name__ == '__main__':
  # 删除所有继承自db.Model的表
  db.drop_all()
  # 创建所有继承自db.Model的表
  db.create_all()
  app.run(debug=True)

不太好,自动选择不能控制

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python全局变量用法实例分析
Jul 19 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
django主动抛出403异常的方法详解
Jan 04 Python
Python设计模式之原型模式实例详解
Jan 18 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
Python 使用matplotlib模块模拟掷骰子
Aug 08 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
Python如何将将模块分割成多个文件
Aug 04 Python
基于Python正确读取资源文件
Sep 14 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 #Python
基于python实现雪花算法过程详解
Nov 16 #Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 #Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 #Python
简单了解Pandas缺失值处理方法
Nov 16 #Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 #Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 #Python
You might like
xml+php动态载入与分页
2006/10/09 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
PHP CURL使用详解
2019/03/21 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
Python实现图片转字符画的示例
2017/08/22 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
Python Pillow Image Invert
2019/01/22 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
python不同版本的_new_不同点总结
2020/12/09 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
大学毕业感言一句话
2014/02/06 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
文明市民先进事迹
2014/05/15 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
python中 Flask Web 表单的使用方法
2022/05/20 Python