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抽象基类用法实例分析
Jun 04 Python
Django的数据模型访问多对多键值的方法
Jul 21 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
Python中免验证跳转到内容页的实例代码
Oct 23 Python
教你利用Selenium+python自动化来解决pip使用异常
May 20 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 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
Yii使用Captcha验证码的方法
2015/12/28 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
JS实现简单日历特效
2020/01/03 Javascript
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
Python操作MongoDB详解及实例
2017/05/18 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python实现从ftp服务器下载文件
2020/03/03 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
非功能性需求都包括哪些方面
2013/10/29 面试题
大学教师年终总结的自我评价
2013/10/29 职场文书
服装创业计划书范文
2014/02/05 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
人力资源求职信
2014/05/25 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
canvas多重阴影发光效果实现
2021/04/20 Javascript
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL