Python实现自定义读写分离代码实例
这篇文章主要介绍了Python实现自定义读写分离代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
思路
- 自定义Session类
- 重写get_bind方法
- 根据self._flushing判断读写操作,选择对应的数据库
- 自定义SQLAlchemy类
- 重写create_session,在其中使用自定义的Session类
fromflaskimportFlask fromflask_sqlalchemyimportSQLAlchemy,SignallingSession,get_state fromsqlalchemyimportorm classRoutingSession(SignallingSession): defget_bind(self,mapper=None,clause=None): state=get_state(self.app) #判断读写操作 ifself._flushing:#写操作,使用主数据库 print("写入数据") returnstate.db.get_engine(self.app,bind='master') else:#读操作,使用从数据库 print('读取数据') returnstate.db.get_engine(self.app,bind='slave') classRoutingSQLAlchemy(SQLAlchemy): defcreate_session(self,options): returnorm.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) #用户表一 classUser(db.Model): __tablename__='t_user' id=db.Column(db.Integer,primary_key=True) name=db.Column(db.String(20),unique=True) @app.route('/') defindex(): #增加数据 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)
不太好,自动选择不能控制
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。