1

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

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

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

4

1 回答 1

2

您需要从 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()
于 2021-11-21T07:08:00.790 回答