Fastapi自定义中间件动态处理多数据库连接

本文介绍如何在Fastapi服务中自定义中间件动态处理多数据库连接。通过中间件拦截请求URL,根据路由与数据库连接的映射,实现不同路由连接相应数据库,避免在每个router中重复配置。文中提供了实现代码和配置细节,为解决Fastapi多数据库连接问题提供解决方案。
摘要由CSDN通过智能技术生成

背景

        自己的fastapi服务,需要连接不同的数据库实例支持多维度业务.查阅了官方文档,也在网上找了很久,也没有找到直接可以采用的方案,既然找不到,那就自己来

        首先,连接多数据库,配置多套数据库连接,实现不同的db实例对象即可实现.然后在不同的router中分别调用.low否?那能不能有一个公共的get_db.供不同的router依赖注入,来完成动态的创建dbSession对象呢?

方案

        我们需要根据定义的路由去区分要连接的数据库,那么如何获取请求的路由呢?是不是可以用中间件来拦截请求的url,然后解析出路由名称呢? 获取到了路由,我们就可以通过路由与数据库连接的映射,来连接相应的库进行处理

实现

        首先上代码        

class DatabaseSelector(BaseHTTPMiddleware):
    def __init__(self, app):
        super().__init__(app)

    async def dispatch(self, request: Request, call_next):
        url_param = str(request.url).split("/")
        if "api" in str(request.url):
            url_param.remove("api")
        route_name = url_param[3]
        if route_name not in list(routeMap.keys()):
            SQLALCHEMY_DATABASE_URI = routeMap["base_mysql"]
        else:
            SQLALCHEMY_DATABASE_URI = routeMap[route_name]
       
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值