缘起
随着项目的不断进展,需要对mysql访问做读写分离,由于没有专业的运维人员做mysql的读写分离proxy,所以在配置了mysql主从库之后,暂定从代码中控制mysql的主从访问,同时,由于我们的数据架构是按照不同用户分库的,对于不同的用户要根据用户ID连接到用户所属库上,而标准的sqlalchemy配置并没有这部分的支持(没有查到资料,如果有大侠有更好的解决方案,求交流),所以只好自己动手丰衣足食啦 ^_^。
流程
项目使用的框架是flask,整体的流程大概是,在程序启动时,初始化一个DBProxy和DBSessionManager,然后在authentication时,根据用户的id,来连接不同的读写库,在具体的代码中调用时,根据具体业务逻辑写操作调用主库的链接,读操作调用从库的链接。
代码实现
config.py
SQLALCHEMY_DATABASE_URI_SETTINGS = {
'master': [],
'slave': []
}
DBSessionManager类
class DBSessionManager(object):
def __init__(self):
self.session_map = {}
def init_app(self, app):
self.create_sessions(app)
def create_sessions(self, app):
db_se