Базовое приложение на FastAPI | Каркас проекта FastAPI + SQLAlchemy (ascynio) + alembic

Поділитися
Вставка
  • Опубліковано 1 чер 2024
  • Рассказываю и показываю как начать работать с FastAPI, как выстроить проект, настроить работу с базой данных, миграции.
    Вам это всё делать не обязательно, потому что код доступен:
    github.com/mahenzon/FastAPI-b...
    Поддержать выход роликов (зарплата монтажеру)
    - на Boosty boosty.to/mahenzon
    - на Sponsr sponsr.ru/suren/
    - через Tinkoff (любые карты) tinkoff.ru/cf/6kbKWtKhapM
    - через CloudTips pay.cloudtips.ru/p/9a8fa641
    Ссылки на соцсети:
    - Канал в ТГ t.me/Khorenyan - тут в чате обсуждаем технологии и ваш код
    - Паблик в ВК SurenKhorenyan
    - Дискорд / discord
    - UA-cam: / @surenkhorenyan
    - Второй канал на UA-cam: / @surenlife
    - RuTube rutube.ru/u/Suren/
    - Все ссылки taplink.cc/mahenzon
    Метки:
    00:00 О чем видео
    01:05 Старт проекта: установка зависимостей и git векрсионирование
    06:55 Почему я складываю внутрь папки приложения
    09:07 Приложение на FastAPI
    10:06 Запуск через PyCharm
    12:12 Первый роутер
    14:03 Базовая конфигурация
    20:14 Подготовка к работе с СУБД Postgres через SQLAlchemy (asyncio)
    39:20 Цикл жизни приложения
    42:45 Переменные окружения в env файле
    52:31 Базовая модель SQLAlchemy
    57:53 Как создать модель и таблицу в БД
    01:01:10 Настройка alembic для асинхронной алхимии
    01:06:06 Автогенерация миграций
    01:07:48 SQLA MetaData naming conventions
    01:17:35 Настройка роутеров API Router и префиксов
    01:20:54 Схемы pydantic
    01:22:54 Взаимодействие API views с БД
    01:29:05 Создание объекта
    01:33:25 Доступно на GitHub
    01:33:53 Ускорение работы с JSON
    01:36:35 SQLA id mixin
    01:38:22 keep folder
    01:39:01 Как использовать репо
    01:40:42 Итоги
  • Наука та технологія

КОМЕНТАРІ • 85

  • @user-ks6cn7or2c
    @user-ks6cn7or2c 14 днів тому +5

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

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому +1

      Кайф! Рад, что вы оценили! Супер, буду продолжать совершенствоваться 🥰

    • @knowledgedose1956
      @knowledgedose1956 13 днів тому +1

      на скорости 2х вообще будет 400%😂

    • @SurenKhorenyan
      @SurenKhorenyan  13 днів тому

      Хааа 😅

  • @artur.tokranov
    @artur.tokranov 13 днів тому +2

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

    • @SurenKhorenyan
      @SurenKhorenyan  13 днів тому

      Пожалуйста! Рад, что вы оценили

  • @gomor1575
    @gomor1575 14 днів тому +3

    У тебя лучший курс по фаст апи на Ютубе. Сразу видно, что ты не просто прочитал документацию по фаст апи и записал курс, как минимум по тому, что ты знаешь, что f строка быстрее str(). Если было бы поменьше воды, то курс был бы идеален

    • @AHTOH_IO
      @AHTOH_IO 14 днів тому +2

      Без воды он был бы сухим)
      Сурен чёткий!

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      Спасибо! Хаа, а что вы относите к "воде"?

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      Спасибо!

    • @AHTOH_IO
      @AHTOH_IO 14 днів тому +1

      @@SurenKhorenyan что-то помимо кода, которое является "лирическим отступлением"
      Вообще её у Вас(тебя) мало! Вполне сжато и по-делу

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      @@AHTOH_IO а сваггер это тоже отступление? Там кода нет 😁

  • @user-qp8hg4ds2b
    @user-qp8hg4ds2b 14 днів тому +2

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

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      Крутяк, я рад! Пожалуйста!

  • @welaskez4997
    @welaskez4997 13 днів тому +2

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

    • @SurenKhorenyan
      @SurenKhorenyan  12 днів тому

      Кайф! Очень приятно, что вы заметили 🥰

  • @user-fp7kv4xd8l
    @user-fp7kv4xd8l 12 днів тому +2

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

    • @SurenKhorenyan
      @SurenKhorenyan  11 днів тому

      Класс, пожалуйста! Рад 😊

  • @adypzz
    @adypzz 14 днів тому +2

    Вот это кайф! Спасибо огромное!🙏

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      Пожалуйста! Рад, что понравилось

  • @MasterGroosha
    @MasterGroosha 12 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  12 днів тому

      Пожалуйста! Рад, что вам понравилось!

  • @Ctac7878
    @Ctac7878 14 днів тому +2

    Огромное спасибо за работу!!!!

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      Пожалуйста! Очень приятно 🥰

  • @3agoskin
    @3agoskin 14 днів тому +1

    У тебя прекрасные видео, как вводные. В свое время меня очень испугала документация алхимии, а сейчас стал вопрос как строить бэкенд, который и на МЛ завязан, и вот все внимание сейчас ушло к пайтону, который я просто забросил.
    Вот отличные вводные, чтобы что-то попробовать с тобой собрать, получить базовую ментальную карту и дальше двигаться
    Видосы у тебя мего огромные, это большая работа в такой Ютьюб опенсорс, спасибо!

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      Крутяк, пожалуйста! Спасибо огромное! Очень приятно 🥰

  • @Qustoos
    @Qustoos 14 днів тому +1

    Отличное видео, спасибо за контент!

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      Пожалуйста! Рад, что понравилось 😊

  • @mister_Iks
    @mister_Iks 14 днів тому +1

    Спасибо! Именно это сейчас мне нужно))

  • @IAmSavier
    @IAmSavier 14 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  14 днів тому

      Спасибо! Согласен, только в такой ролик пока не влезает 😁

  • @thisIsMine007
    @thisIsMine007 10 днів тому +1

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

  • @kopylov_vadik
    @kopylov_vadik 4 дні тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  4 дні тому

      Пожалуйста!
      Нет, не использую. Подсказки встроенные в PyCharm (оффлайн автокомплит)

  • @ZlobniyTapoG
    @ZlobniyTapoG 10 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  10 днів тому +1

      Привет. В ближайшее время не планирую. Можете заказать тему через подписку с уровнем Профессионал на бусти. Но там уже очередь на июнь, так что даже если сейчас оформите, будет не раньше июля или даже августа.

  • @user-hz5nl3pl7o
    @user-hz5nl3pl7o 14 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  13 днів тому

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

  • @K3NT_
    @K3NT_ 12 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  11 днів тому +1

      Пожалуйста! Без понятия как называется 😅
      Лучше та, с которой вам удобно работать 🙂

  • @hollowknight7180
    @hollowknight7180 14 днів тому +1

    Лучший! 😁

  • @kadzutokun
    @kadzutokun 10 днів тому +2

    Привет, Сурен
    Знаком с тобой больше года почти!)
    Благодаря твоим видео уловил принципы Django и далее нашел самостоятельно пути развития и устроился Джуном)
    Сейчас уж больно понравилось расширение для пуша в гит с одного файла, но с выбором изменений, не подскажешь есть ли такое же расширение для vs code?

    • @SurenKhorenyan
      @SurenKhorenyan  10 днів тому +1

      Привет. Круто!
      Вы большой молодец.
      Вы про какое расширение? В PyCharm и в VS Code встроенная работа с git. Я через него и работаю. Нет опции выбрать, какие изменения пушить. Если вы про переписывание истории, то я это сделал за кадром, чтобы не грузить зрителей

    • @kadzutokun
      @kadzutokun 10 днів тому +1

      @@SurenKhorenyan Нет, я про возможность не сразу пушить весь файл в гит, а выбирать строки кода через плюсик для пуша

    • @kadzutokun
      @kadzutokun 10 днів тому +1

      @@SurenKhorenyan Спасибо большое!)
      Продолжайте вести ваш канал, у вас здорово получается!)

    • @SurenKhorenyan
      @SurenKhorenyan  9 днів тому

      Для пуша или для коммита? Для коммита просто кликаю напротив строк

    • @SurenKhorenyan
      @SurenKhorenyan  9 днів тому

      Пожалуйста!

  • @romul23
    @romul23 7 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  7 днів тому

      Ого! А покажите? У меня в примере работает же.. можете в чат в телеграм закинуть пример кода?

  • @ufc_uz6
    @ufc_uz6 13 днів тому +1

    Круто❤

  • @popcorn_833
    @popcorn_833 День тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  День тому +1

      Привет, пожалуйста!
      Ставьте как показал в видео и не парьтесь. Реальные значения надо получать опытным путём на конкретном проекте: давать нагрузку и смотреть, что и как происходит

    • @popcorn_833
      @popcorn_833 День тому +1

      Какие средние значения у ваших проектах?

    • @SurenKhorenyan
      @SurenKhorenyan  День тому +1

      @@popcorn_833 я показал как раз те, что обычно использую: 50 и 10 оверфлоу

    • @popcorn_833
      @popcorn_833 День тому +1

      @@SurenKhorenyanСпасибо!

    • @SurenKhorenyan
      @SurenKhorenyan  День тому

      @@popcorn_833 пожалуйста!

  • @thisIsMine007
    @thisIsMine007 10 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  10 днів тому

      По алхимии в этом же плейлисте есть несколько видео

  • @MrEligos
    @MrEligos 14 днів тому +1

    спс

  • @Dmitriy_Pesk0ff
    @Dmitriy_Pesk0ff 13 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  13 днів тому

      А в чём противоречие? Если речь про from_attributes, я рассказываю как раньше было. Для тех, кто понимает боль, показанный пример актуален. Остальным по барабану, и можно не писать лишний код. Или вы про что-то другое?

  • @apostol_fet
    @apostol_fet 14 днів тому +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  13 днів тому +1

      Если вас смущает, можете просто в каждом модуле, где нужно взять настойки, инициализировать экземпляр настроек заново. Только зачем? Что вы так сэкономите, какую проблему решите? Лишняя работа и только

    • @user-mq3pj2om8u
      @user-mq3pj2om8u 3 дні тому +1

      @@SurenKhorenyan Привет спасибо за труд! а если создать функцию get_settings() под декоратором lru_cache? Я не в коем случае не хочу умничать)) Просто порой бывает сложно понять как лучше сделать(видел множство примеров и часто люди делают по разному), без функции выглядит лаконичнее))

    • @SurenKhorenyan
      @SurenKhorenyan  3 дні тому +1

      @@user-mq3pj2om8u так можно сделать (технически да, я такое даже встречал в продакшне). Только зачем? А итоге всё равно будет один и тот же экземпляр, только его ещё и получать нужно будет через функцию, а не через готовую переменную. Лишняя работа, которая ничему не помогает