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获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
Python实现excel转sqlite的方法
Jul 17 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
python的unittest测试类代码实例
Dec 07 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
python读取文本中的坐标方法
Oct 14 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
python sqlite的Row对象操作示例
Sep 11 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
python将数据插入数据库的代码分享
Aug 16 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 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变量引用的面试题
2010/08/08 PHP
PHP中用hash实现的数组
2011/07/17 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Python新手们容易犯的几个错误总结
2017/04/01 Python
python实现excel读写数据
2021/03/02 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
python安装gdal的两种方法
2019/10/29 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
pyspark 随机森林的实现
2020/04/24 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
高中生自我鉴定范文
2013/10/30 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
经营理念标语
2014/06/21 职场文书
好人好事演讲稿
2014/09/01 职场文书
2015年教师节活动总结
2015/03/20 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
css弧边选项卡的项目实践
2023/05/07 HTML / CSS