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

Ғылым және технология

Рассказываю и показываю как начать работать с 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
- KZread: / @surenkhorenyan
- Второй канал на KZread: / @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 Итоги

Пікірлер: 95

  • @user-ks6cn7or2c
    @user-ks6cn7or2cАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @knowledgedose1956

    @knowledgedose1956

    Ай бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    29 күн бұрын

    Хааа 😅

  • @user-fp7kv4xd8l
    @user-fp7kv4xd8l29 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    28 күн бұрын

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

  • @artur.tokranov
    @artur.tokranov29 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    29 күн бұрын

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

  • @adypzz
    @adypzzАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @user-qp8hg4ds2b
    @user-qp8hg4ds2bАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @Ctac7878
    @Ctac7878Ай бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @MasterGroosha
    @MasterGroosha29 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    29 күн бұрын

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

  • @mister_Iks
    @mister_IksАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

    Огонь! Пожалуйста!

  • @Qustoos
    @QustoosАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @yuriybukovskiy449
    @yuriybukovskiy44915 күн бұрын

    Сурен, как всегда на высоте! Спасибо за проделанную работу!

  • @SurenKhorenyan

    @SurenKhorenyan

    15 күн бұрын

    Кайф, пожалуйста!

  • @thisIsMine007
    @thisIsMine00726 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    26 күн бұрын

    Пожалуйста!

  • @rebelbait
    @rebelbait3 күн бұрын

    Сурен, доброго времени суток, надеюсь это не последнее видео про FastAPI)

  • @SurenKhorenyan

    @SurenKhorenyan

    3 күн бұрын

    Здравствуйте! Точно не последнее

  • @3agoskin
    @3agoskinАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @IAmSavier
    @IAmSavierАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @gomor1575
    @gomor1575Ай бұрын

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

  • @AHTOH_IO

    @AHTOH_IO

    Ай бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

    Спасибо!

  • @AHTOH_IO

    @AHTOH_IO

    Ай бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @welaskez4997
    @welaskez499729 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    29 күн бұрын

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

  • @hollowknight7180
    @hollowknight7180Ай бұрын

    Лучший! 😁

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

    Крутяк, спасибо!

  • @ZlobniyTapoG
    @ZlobniyTapoG26 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    26 күн бұрын

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

  • @ufc_uz6
    @ufc_uz629 күн бұрын

    Круто❤

  • @SurenKhorenyan

    @SurenKhorenyan

    29 күн бұрын

    Класс, спасибо!

  • @kopylov_vadik
    @kopylov_vadik20 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    20 күн бұрын

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

  • @krylovilya1
    @krylovilya19 күн бұрын

    Теперь ждём ролик по litestar)

  • @SurenKhorenyan

    @SurenKhorenyan

    9 күн бұрын

    Ох, возможно. Но это пока не точно

  • @user-hz5nl3pl7o
    @user-hz5nl3pl7oАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @MrEligos
    @MrEligosАй бұрын

    спс

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

    Пжл!

  • @kadzutokun
    @kadzutokun26 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    26 күн бұрын

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

  • @kadzutokun

    @kadzutokun

    26 күн бұрын

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

  • @kadzutokun

    @kadzutokun

    26 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    26 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    26 күн бұрын

    Пожалуйста!

  • @K3NT_
    @K3NT_29 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    28 күн бұрын

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

  • @thisIsMine007
    @thisIsMine00726 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    26 күн бұрын

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

  • @popcorn_833
    @popcorn_83317 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    17 күн бұрын

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

  • @popcorn_833

    @popcorn_833

    17 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    17 күн бұрын

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

  • @popcorn_833

    @popcorn_833

    17 күн бұрын

    @@SurenKhorenyanСпасибо!

  • @SurenKhorenyan

    @SurenKhorenyan

    17 күн бұрын

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

  • @Dmitriy_Pesk0ff
    @Dmitriy_Pesk0ffАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @romul23
    @romul2323 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    23 күн бұрын

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

  • @Pr0xymate
    @Pr0xymate8 күн бұрын

    Все хочется выучить и начать пользоваться FastAPI, но как же сильно отпугивает эта вся ручная настройка alembic/sqlalchemy... Как же все удобно и для людей сделано в джанго...

  • @SurenKhorenyan

    @SurenKhorenyan

    8 күн бұрын

    Да, в Джанго очень удобно и легко, особенно поначалу. Вот для фастапи можете взять код из видео (ссылка на репозиторий в описании), и дальше делать всё что вам нужно

  • @apostol_fet
    @apostol_fetАй бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    Ай бұрын

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

  • @user-mq3pj2om8u

    @user-mq3pj2om8u

    19 күн бұрын

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

  • @SurenKhorenyan

    @SurenKhorenyan

    19 күн бұрын

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

Келесі