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字符串连接方式汇总
Aug 21 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
Python的Django框架中自定义模版标签的示例
Jul 20 Python
python实现按行切分文本文件的方法
Apr 18 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
python绘制随机网络图形示例
Nov 21 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
Python基于numpy模块实现回归预测
May 14 Python
python 元组和列表的区别
Dec 30 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代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python全局变量引用与修改过程解析
2020/01/07 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
Django多数据库联用实现方法解析
2020/11/12 Python
python如何调用php文件中的函数详解
2020/12/29 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
2014社区三八妇女节活动总结
2014/03/01 职场文书
家长会主持词
2014/03/26 职场文书
小摄影师教学反思
2014/04/27 职场文书
2014年档案室工作总结
2014/12/01 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python