Базовое приложение на FastAPI | Каркас проекта FastAPI + SQLAlchemy (ascynio) + alembic
Vložit
- čas přidán 14. 06. 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
- CZcams: / @surenkhorenyan
- Второй канал на CZcams: / @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 Итоги - Věda a technologie
Теперь я усваиваю на 200% лучше. Синхронизация произошла!!! Такая подача - спокойный обычный разговор - the best! Спасибо, что учитываешь пожелания и рекомендации подписчиков.
Кайф! Рад, что вы оценили! Супер, буду продолжать совершенствоваться 🥰
на скорости 2х вообще будет 400%😂
Хааа 😅
Сурен, доброго времени суток, надеюсь это не последнее видео про FastAPI)
Сурен, спасибо большое за труды!
Пожалуйста! Рад, что вы оценили
Очень нравится контент твоего канала. Спасибо!
Крутяк, я рад! Пожалуйста!
Огромное спасибо, круто! Всё понятно, ёмко и по делу
Класс, пожалуйста! Рад 😊
Вот это кайф! Спасибо огромное!🙏
Пожалуйста! Рад, что понравилось
сразу бросается в глаза что нет типовых «ээ» «аа», складная речь, респект
Кайф! Очень приятно, что вы заметили 🥰
Огромное спасибо за работу!!!!
Пожалуйста! Очень приятно 🥰
У тебя лучший курс по фаст апи на Ютубе. Сразу видно, что ты не просто прочитал документацию по фаст апи и записал курс, как минимум по тому, что ты знаешь, что f строка быстрее str(). Если было бы поменьше воды, то курс был бы идеален
Без воды он был бы сухим)
Сурен чёткий!
Спасибо! Хаа, а что вы относите к "воде"?
Спасибо!
@@SurenKhorenyan что-то помимо кода, которое является "лирическим отступлением"
Вообще её у Вас(тебя) мало! Вполне сжато и по-делу
@@AHTOH_IO а сваггер это тоже отступление? Там кода нет 😁
Отличное видео! Спасибо, Сурен!
Пожалуйста! Рад, что вам понравилось!
Сурен, как всегда на высоте! Спасибо за проделанную работу!
Кайф, пожалуйста!
Вот этот видеоурок больше похож на основу frameworka Fast api чем предыдущие. Спасибо за труд и уделения времени
Пожалуйста!
У тебя прекрасные видео, как вводные. В свое время меня очень испугала документация алхимии, а сейчас стал вопрос как строить бэкенд, который и на МЛ завязан, и вот все внимание сейчас ушло к пайтону, который я просто забросил.
Вот отличные вводные, чтобы что-то попробовать с тобой собрать, получить базовую ментальную карту и дальше двигаться
Видосы у тебя мего огромные, это большая работа в такой Ютьюб опенсорс, спасибо!
Крутяк, пожалуйста! Спасибо огромное! Очень приятно 🥰
Отличное видео, спасибо за контент!
Пожалуйста! Рад, что понравилось 😊
Спасибо! Именно это сейчас мне нужно))
Огонь! Пожалуйста!
Сурен, очень хотелось бы увидеть от тебя что-то подобное, но с реализацией архитектурного паттерна DDD, например.
Привет. В ближайшее время не планирую. Можете заказать тему через подписку с уровнем Профессионал на бусти. Но там уже очередь на июнь, так что даже если сейчас оформите, будет не раньше июля или даже августа.
Отлично, сжато, без воды и все самое главное. Еще бы добавить сюда асинхронные тесты. Ну и можно линтеры (ну и black -> ruff)
Спасибо! Согласен, только в такой ролик пока не влезает 😁
спасибо за материал !
Вы используете copilot в своей ide ?
Пожалуйста!
Нет, не использую. Подсказки встроенные в PyCharm (оффлайн автокомплит)
Теперь ждём ролик по litestar)
Ох, возможно. Но это пока не точно
Лучший! 😁
Крутяк, спасибо!
Спасибо за видео, оч полезно. Ты сказал на 46:17 про монорепозиторий, и .env для каждого микросервиса в своем каталоге. А если 2 микросервиса и больше, как считаешь, какая бест практика по установке пакетов для каждого микросервиса? Переходить на pip requir*.txt для каждого микросервиса или в pyproject делать группы или extra для каждого микросервиса или что-то иное?
Смотря как сильно будут разделены ваши микросервисы. Можно для каждого проекта сделать свой отдельный конфиг для зависимостей, угу
Круто❤
Класс, спасибо!
Спасибо за видео. А как называется эта архитектура? Вообще какая архитектура лучше для fastapi? Что насчет clean архитектуры?
Пожалуйста! Без понятия как называется 😅
Лучше та, с которой вам удобно работать 🙂
Привет, Сурен
Знаком с тобой больше года почти!)
Благодаря твоим видео уловил принципы Django и далее нашел самостоятельно пути развития и устроился Джуном)
Сейчас уж больно понравилось расширение для пуша в гит с одного файла, но с выбором изменений, не подскажешь есть ли такое же расширение для vs code?
Привет. Круто!
Вы большой молодец.
Вы про какое расширение? В PyCharm и в VS Code встроенная работа с git. Я через него и работаю. Нет опции выбрать, какие изменения пушить. Если вы про переписывание истории, то я это сделал за кадром, чтобы не грузить зрителей
@@SurenKhorenyan Нет, я про возможность не сразу пушить весь файл в гит, а выбирать строки кода через плюсик для пуша
@@SurenKhorenyan Спасибо большое!)
Продолжайте вести ваш канал, у вас здорово получается!)
Для пуша или для коммита? Для коммита просто кликаю напротив строк
Пожалуйста!
Было бы еще лучьше, если еще по SQL-alchemy и pydantic дали бы бозовые понятия
По алхимии в этом же плейлисте есть несколько видео
не получается создать конфиг с подмоделью у которой в наименовании api - это глюк pydantic-settings. помогает только переименование.
Ого! А покажите? У меня в примере работает же.. можете в чат в телеграм закинуть пример кода?
Привет, спасибо за видео!
Такой вопрос: Как правильно рассчитать poll_size для engine? И max_connections для postgres?
Привет, пожалуйста!
Ставьте как показал в видео и не парьтесь. Реальные значения надо получать опытным путём на конкретном проекте: давать нагрузку и смотреть, что и как происходит
Какие средние значения у ваших проектах?
@@popcorn_833 я показал как раз те, что обычно использую: 50 и 10 оверфлоу
@@SurenKhorenyanСпасибо!
@@popcorn_833 пожалуйста!
спс
Пжл!
Все хочется выучить и начать пользоваться FastAPI, но как же сильно отпугивает эта вся ручная настройка alembic/sqlalchemy... Как же все удобно и для людей сделано в джанго...
Да, в Джанго очень удобно и легко, особенно поначалу. Вот для фастапи можете взять код из видео (ссылка на репозиторий в описании), и дальше делать всё что вам нужно
1:22:43 - Сурен, а как же дзен Python? "Явное лучше чем не явное"😊
А в чём противоречие? Если речь про from_attributes, я рассказываю как раньше было. Для тех, кто понимает боль, показанный пример актуален. Остальным по барабану, и можно не писать лишний код. Или вы про что-то другое?
Очень смущает использование глобальной переменной settings
Если вас смущает, можете просто в каждом модуле, где нужно взять настойки, инициализировать экземпляр настроек заново. Только зачем? Что вы так сэкономите, какую проблему решите? Лишняя работа и только
@@SurenKhorenyan Привет спасибо за труд! а если создать функцию get_settings() под декоратором lru_cache? Я не в коем случае не хочу умничать)) Просто порой бывает сложно понять как лучше сделать(видел множство примеров и часто люди делают по разному), без функции выглядит лаконичнее))
@@user-mq3pj2om8u так можно сделать (технически да, я такое даже встречал в продакшне). Только зачем? А итоге всё равно будет один и тот же экземпляр, только его ещё и получать нужно будет через функцию, а не через готовую переменную. Лишняя работа, которая ничему не помогает