Подскажите пожалуйста, как подружить fastapi и sqlalchemy?
Пытаюсь получить данные из postgres с помощью сырого запроса через sqlalchemy core, но когда await'чу данные, то мне ничего не приходит. Проверял функцию отдельно, запуская через asyncio.run() - отрабатывает корректно, а вот когда пытаюсь в @app.get получить - хрен.
Подскажите, как-таки получить данные из БД при запросе эндпоинта?
Как инициализирую fastapi:
app = FastAPI()
origins = [
"
http://localhost:3000",
"localhost:3000"
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"]
)
uvicorn.run("app.api:app", host="0.0.0.0", port=8000, reload=True)
Как инициализирую async engine:
async_engine = create_async_engine(
url=f"postgresql+asyncpg://{os.getenv('DB_USER')}:" +
f"{os.getenv("DB_PASSWORD")}@" +
f"{os.getenv("DB_HOST")}:" +
f"{os.getenv("DB_PORT")}/" +
f"{os.getenv("DB_NAME")}",
echo=True,
pool_size=200,
)
Функция, вызываемая для запроса к БД в эндпоинте:
async def select_data():
async with async_engine.connect() as connect:
res = await connect.execute(text("SELECT * FROM students")
return str(res.all())
Сам эндпоинт:
@app.get("/students", tags=["students"])
async def get_students() -> dict:
students = await select_data()
# students = await asyncio.run(select_data())
print("DATA: ", students)
return { "data": students }