Основное приложение с использованием FastAPI | Структура проекта FastAPI с SQLAlchemy (asyncio) и alembic

Posted by

Базовое приложение на FastAPI с SQLAlchemy и alembic

Базовое приложение на FastAPI с SQLAlchemy и alembic

Если вы хотите использовать FastAPI для создания веб-приложений, то в этой статье мы расскажем вам, как создать базовое приложение с использованием SQLAlchemy и alembic.

Шаг 1: Установка FastAPI, SQLAlchemy и alembic

Для начала установите FastAPI, SQLAlchemy и alembic при помощи pip:


    pip install fastapi
    pip install sqlalchemy
    pip install alembic
  

Шаг 2: Создание каркаса проекта

Создайте новую директорию для вашего проекта и создайте в ней следующие файлы:

  • main.py – основной файл приложения FastAPI
  • database.py – файл для работы с базой данных SQLAlchemy
  • alembic.ini и alembic – файлы для миграций базы данных с помощью alembic

Шаг 3: Настройка базы данных и миграции

В database.py определите модели данных, используя SQLAlchemy. Затем создайте миграции для базы данных при помощи alembic:


    python alembic init alembic
    python alembic revision --autogenerate -m "initial"
    python alembic upgrade head
  

Шаг 4: Создание API с помощью FastAPI

В main.py определите API с помощью FastAPI, используя модели данных из database.py:


    from fastapi import FastAPI
    from .database import Base, engine, Session

    app = FastAPI()

    @app.get("/")
    def read_root():
        return {"message": "Hello World"}
  

Шаг 5: Запуск приложения

Наконец, запустите приложение FastAPI при помощи uvicorn:


    uvicorn main:app --reload
  

Теперь ваше базовое приложение на FastAPI с SQLAlchemy и alembic готово к использованию!

0 0 votes
Article Rating
23 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@popcorn_833
1 month ago

Привет, спасибо за видео!
Такой вопрос: Как правильно рассчитать poll_size для engine? И max_connections для postgres?

@user-gy2ji3ur4z
1 month ago

А почему бы не использовать параметр name в UniqueConstraint("foo", "bar",name="foo_bar_uc") и тогда сразу создастся конструкция с нужным именем? PS Хотя то решение которое вы прописали более универсальное и позволяет более тонко настроить БД

@kopylov_vadik
1 month ago

спасибо за материал !
Вы используете copilot в своей ide ?

@romul23
1 month ago

не получается создать конфиг с подмоделью у которой в наименовании api – это глюк pydantic-settings. помогает только переименование.

@kadzutokun
1 month ago

Привет, Сурен

Знаком с тобой больше года почти!)

Благодаря твоим видео уловил принципы Django и далее нашел самостоятельно пути развития и устроился Джуном)

Сейчас уж больно понравилось расширение для пуша в гит с одного файла, но с выбором изменений, не подскажешь есть ли такое же расширение для vs code?

@ZlobniyTapoG
1 month ago

Сурен, очень хотелось бы увидеть от тебя что-то подобное, но с реализацией архитектурного паттерна DDD, например.

@thisIsMine007
1 month ago

Было бы еще лучьше, если еще по SQL-alchemy и pydantic дали бы бозовые понятия

@thisIsMine007
1 month ago

Вот этот видеоурок больше похож на основу frameworka Fast api чем предыдущие. Спасибо за труд и уделения времени

@user-fp7kv4xd8l
1 month ago

Огромное спасибо, круто! Всё понятно, ёмко и по делу

@K3NT_
1 month ago

Спасибо за видео. А как называется эта архитектура? Вообще какая архитектура лучше для fastapi? Что насчет clean архитектуры?

@MasterGroosha
1 month ago

Отличное видео! Спасибо, Сурен!

@ufc_uz6
1 month ago

Круто❤

@welaskez4997
1 month ago

сразу бросается в глаза что нет типовых «ээ» «аа», складная речь, респект

@artur.tokranov
1 month ago

Сурен, спасибо большое за труды!

@Dmitriy_Pesk0ff
1 month ago

1:22:43 – Сурен, а как же дзен Python? "Явное лучше чем не явное"😊

@user-hz5nl3pl7o
1 month ago

Спасибо за видео, оч полезно. Ты сказал на 46:17 про монорепозиторий, и .env для каждого микросервиса в своем каталоге. А если 2 микросервиса и больше, как считаешь, какая бест практика по установке пакетов для каждого микросервиса? Переходить на pip requir*.txt для каждого микросервиса или в pyproject делать группы или extra для каждого микросервиса или что-то иное?

@apostol_fet
1 month ago

Очень смущает использование глобальной переменной settings

@user-ks6cn7or2c
1 month ago

Теперь я усваиваю на 200% лучше. Синхронизация произошла!!! Такая подача – спокойный обычный разговор – the best! Спасибо, что учитываешь пожелания и рекомендации подписчиков.

@user-qp8hg4ds2b
1 month ago

Очень нравится контент твоего канала. Спасибо!

@IAmSavier
1 month ago

Отлично, сжато, без воды и все самое главное. Еще бы добавить сюда асинхронные тесты. Ну и можно линтеры (ну и black -> ruff)