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的Django框架中生成CSV文件的方法
Jul 22 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
python深copy和浅copy区别对比解析
Dec 26 Python
pytorch中的transforms模块实例详解
Dec 31 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
keras打印loss对权重的导数方式
Jun 10 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 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
PHP5函数小全(分享)
2013/06/06 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现socket端口重定向示例
2014/02/10 Python
用Python实现KNN分类算法
2017/12/22 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
python微信撤回监测代码
2019/04/29 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
python操作excel让工作自动化
2019/08/09 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
优秀小学生家长评语
2014/01/30 职场文书
师德个人剖析材料
2014/02/02 职场文书
安全演讲稿大全
2014/05/09 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android
python标准库ElementTree处理xml
2022/05/20 Python