Как инициализировать соединение с БД в FastAPI с событиями продолжительности жизни?Python

Программы на Python
Anonymous
Как инициализировать соединение с БД в FastAPI с событиями продолжительности жизни?

Сообщение Anonymous »

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

Код: Выделить всё

db_session = None

@asynccontextmanager
async def lifespan(app: FastAPI):
db_session = DBConnection("file.db")
if db_session.get_db_connection() is None:
raise InitializationError("Could not get access database file.")
print(db_session.get_test_value()) # Prints out a valid value
yield

app = FastAPI(lifespan=lifespan)
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
print(db_session) # Prints None
Версии
  • Python 3.9
  • FastAPI 0.114.2
    Pydantic 2.9.1
  • uvicorn 0.30.6
Что я пробовал< /h1>
Я инициализировал значение с помощью [] вместо None
Я инициализировал значение с помощью {} вместо None (как в руководстве)
Я подключил сеанс базы данных к `db_session["db"] вместо того, чтобы назначить его напрямую, карта остается пустой.
Я инициализировал значение в lifespan< /code> со строкой, просто для проверки.
Я объявил переменную db_session как глобальную в функции lifespan, прежде чем присвоить ей значение.
Все тесты приводят к одному и тому же результату: значение инициализируется вне функции жизненного цикла (Нет или [] или {})

Подробнее здесь: https://stackoverflow.com/questions/789 ... pan-events

Вернуться в «Python»