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操作配置文件ini的三种方法讲解
Feb 22 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
django日志默认打印request请求信息的方法示例
May 17 Python
Python新手学习装饰器
Jun 04 Python
Python实现爬取并分析电商评论
Jun 19 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
Dec 01 Python
Python实现Word文档转换Markdown的示例
Dec 22 Python
如何用Python提取10000份log中的产品信息
Jan 14 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
Windows安装Anaconda3的方法及使用过程详解
Jun 11 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
PHP中数组合并的两种方法及区别介绍
2012/09/14 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
PHP编写简单的App接口
2016/08/28 PHP
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
django 环境变量配置过程详解
2019/08/06 Python
python基础教程之while循环
2019/08/14 Python
python实现图像拼接功能
2020/03/23 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
Django 解决由save方法引发的错误
2020/05/21 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
网络技术专业推荐信
2014/02/20 职场文书
庆国庆活动总结
2014/08/28 职场文书
订货会邀请函
2015/01/31 职场文书
先进个人总结范文
2015/02/15 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS