如何在 Fastapi 中将数据库会话传递给 Ariadne

How to pass database session to Ariadne in Fastapi

我是 python 的新手,正在尝试学习和使用 Fastapi、Ariadne 和 SQLAlchemy。我正在关注文档,但我被卡住了。

我有针对普通 REST 请求的依赖注入 get_db(),它提供了一个 Session 对象,从请求开始我通过几个不同的模块直到我真正做数据库工作,老实说我不不要得到这个设计。但是我把它留在那里了。

然后,另一个问题出现了。如何将数据库传递给 Ariadne GraphQL?我应该使用 context_value 还是有其他选择?

您需要从 ariadne 解析器创建一个 SQLAlchemy 会话。并且不要忘记在解析器完成后关闭连接。

假设您的数据库文件如下所示,

import os

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = os.getenv("DB_CONN_STRING")

engine = create_engine(SQLALCHEMY_DATABASE_URL)
LocalSession = sessionmaker(autocommit=False, autoflush=False, bind=engine)

def get_db():
    db = None
    try:
        db = LocalSession()
        yield db
    finally:
        if db:
            db.close()
  • 您可以在解析器上执行以下操作
# Import the local session from local database file
from app.database import LocalSession

db = LocalSession()
# Do whatever you need to do
db.close()