首页 > 解决方案 > FastAPI 覆盖数据库连接

问题描述

我正在尝试使用 sqlalchemy 1.4(async) 和 FastAPI 实现多租户模式(每个用户都有自己的数据库)

据我了解,每次发生请求时,我都需要选择我的 DB_URL。

但是有一个问题,我该怎么做?我尝试使用上下文,但我的数据库连接始终是静态的

这是我得到的:

engine = create_async_engine('MY_DATABASE_URL', future=True, echo=False)

async_session = sessionmaker(engine, expire_on_commit=False, class_=AsyncSession)

Base = declarative_base()

我尝试使用带有绑定参数的 sessionmaker 来覆盖引擎,但它不起作用

try:
    async_session = sessionmaker(bind=create_async_engine(context['db']), expire_on_commit=False, class_=AsyncSession)
 
except:
    async_session = sessionmaker(engine, expire_on_commit=False, class_=AsyncSession)

async with async_session() as session:
      async with session.begin():
       book_dal = BookDAL(session)
       all_book = await book_dal.get_all_books()
                
       return [i for i in all_book]

即使我实现了 MiddlleWare,我也无法更改我的引擎。任何建议都非常受欢迎。

标签: sqlalchemyfastapi

解决方案


推荐阅读