如何在 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()
我是 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()