缘起
最近有个项目,需要提供web api出来,我很自然的选择了flask + sqlalchemy的搭配。逻辑实现上没有说的,但是到后面打算做读写分离的时候,突然发现 flask跟sqlalchemy都没有直接提供读写分离的配置。到时再最开始时使用Flask-SqlAlchemy的时候提到了有bind,但是使用起来不是很方便,不能满足我的要求。于是在网上搜索了一些,中文的资料也没有满足我的要求的。到时再google的时候,发现了一篇英文博客,于是放弃了使用Flask-SqlAlchemy,自己实现了一个简单的读写分离
需求
读写分离,我的数据表定义只有一个,通过从sqlalchemy拿到的session来决定我的这个请求时发到主库还是从库。最后达到的效果是这样的
with db_manager.session_ctx(bind='master') as session:
session.query(....).filter(....)
# 默认走从库
with db_manager.session_ctx() <