Интеграция PostgreSQL с FastAPI‑приложением

Создайте пул PostgreSQL на время жизни приложения и выполняйте SQL в /menu через полученное из пула соединение. Не открывайте неограниченное число соединений и не блокируйте async-обработчик синхронным драйвером.

Короткий ответ

Что ответить на собеседовании

Создайте пул PostgreSQL на время жизни приложения и выполняйте SQL в /menu через полученное из пула соединение. Не открывайте неограниченное число соединений и не блокируйте async-обработчик синхронным драйвером.

Подробный разбор

Ответ с пояснениями

Условие

Организовать соединение с базой данных PostgreSQL в проекте на FastAPI. Эндпоинт /menu должен получать данные напрямую из таблицы базы, а не использовать статический список, объявленный в коде.

Ответ

Создайте пул PostgreSQL на время жизни приложения и выполняйте SQL в /menu через полученное из пула соединение. Не открывайте неограниченное число соединений и не блокируйте async-обработчик синхронным драйвером.

Пример с Psycopg 3; предполагается таблица menu(id, name):

import os
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request
from psycopg.rows import dict_row
from psycopg_pool import AsyncConnectionPool

@asynccontextmanager
async def lifespan(app):
    async with AsyncConnectionPool(
        os.environ['DATABASE_URL'], min_size=1, max_size=5,
        open=False, kwargs={'row_factory': dict_row}
    ) as pool:
        await pool.wait()
        app.state.db = pool
        yield

app = FastAPI(lifespan=lifespan)

@app.get('/menu')
async def menu(request: Request):
    async with request.app.state.db.connection() as connection:
        cursor = await connection.execute(
            'SELECT id, name FROM menu ORDER BY id LIMIT 100'
        )
        return await cursor.fetchall()

Схему и поля подставляют по реальной БД; секрет подключения не помещают в код. Для пользовательских фильтров нужны связанные параметры SQL. Добавьте таймауты, пагинацию и безопасную обработку недоступности БД.

Источник: www.psycopg.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее