Привет! Сегодня я хочу рассказать о том, как запустить определенный код только в начале работы приложения с использованием FastAPI. Конкретно, мы рассмотрим ситуацию, когда нужно создать таблицы в базе данных, если их там еще нет.
Для начала убедитесь, что у вас установлена библиотека SQLAlchemy для работы с базой данных и FastAPI для создания веб-приложения. Если они не установлены, выполните команды `pip install sqlalchemy` и `pip install fastapi`.Затем, вам понадобится создать файл с базовой структурой вашего приложения, мы его назовем `main.py`. В этом файле мы определим основные маршруты и настройки FastAPI.python
from fastapi import FastAPI
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
app FastAPI
# Описываем настройки для подключения к базе данных
DATABASE_URL ″sqlite:///./test.db» # Здесь можно указать свою строку подключения
engine create_engine(DATABASE_URL)
SessionLocal sessionmaker(autocommitFalse, autoflushFalse, bindengine)
Base declarative_base
Base.metadata.create_all(bindengine)
# Код для создания таблиц в базе данных
# Эту функцию мы вызовем только один раз в начале работы приложения
async def create_tables⁚
async with engine.begin as conn⁚
await conn.run_sync(Base.metadata.create_all)
@app.on_event(″startup″) # Запускаем этот код при запуске приложения
async def startup⁚
await create_tables # Вызываем функцию создания таблиц
# Здесь можно добавить другие маршруты и функции
В приведенном выше коде мы создаем экземпляр FastAPI, определяем настройки подключения к базе данных и создаем две вспомогательные функции. Функция `create_tables` отвечает за создание таблиц в базе данных (в вашем примере представлена функция `create_tables`), а функция `startup` будет вызываться при запуске приложения и запускать функцию `create_tables`.
Для того, чтобы код `create_tables` вызывался только один раз при запуске приложения, мы используем декоратор `@app.on_event(″startup″)`, который указывает FastAPI на выполнение данного кода только один раз при запуске.Теперь, когда мы определили все необходимые функции, мы можем создать таблицы в базе данных по маршруту `/create_tables`. Для этого мы можем добавить следующую функцию и маршрут в файл `main.py`⁚
python
from fastapi import APIRouter
router APIRouter
@router.get(″/create_tables»)
async def create_tables_route⁚
await create_tables # Вызов функции создания таблиц
return {″message″⁚ ″Tables created″}
app.include_router(router)
Здесь мы создали новый роутер `router`, добавили маршрут `/create_tables` и привязали его к функции `create_tables_route`. При обращении к этому маршруту будет вызываться функция `create_tables` и создаваться таблицы в базе данных.
Теперь, когда мы запустим наше приложение через команду `uvicorn main⁚app —reload`, приложение выполнит код создания таблиц только один раз в начале работы.
Надеюсь, эта статья помогла вам понять, как запустить нужный код только один раз в начале работы приложения с использованием FastAPI. Удачи в вашем проекте!