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中使用OpenCV进行人脸检测的例子
Apr 18 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
python脚本内运行linux命令的方法
Jul 02 Python
解读Python编程中的命名空间与作用域
Oct 16 Python
详解python的webrtc库实现语音端点检测
May 31 Python
Python守护线程用法实例
Jun 23 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
Python基于property实现类的特性操作示例
Jun 15 Python
python和opencv实现抠图
Jul 18 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
python re的findall和finditer的区别详解
Nov 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
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python 解析html之BeautifulSoup
2009/07/07 Python
Python中的字典遍历备忘
2015/01/17 Python
Python实现的选择排序算法示例
2017/11/29 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
详解python中的异常和文件读写
2021/01/03 Python
Python如何telnet到网络设备
2021/02/18 Python
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
电大毕业自我鉴定
2014/02/03 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
《桥》教学反思
2014/04/09 职场文书
团队精神口号
2014/06/06 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL