Асинхронная SQLAlchemy 2.0 | alembic миграции | Отношения между таблицами | Не FastAPI | Видео 3

Поделиться
HTML-код
  • Опубликовано: 27 окт 2024

Комментарии • 201

  • @VitalyTolmachev
    @VitalyTolmachev Год назад +8

    Таймкоды:
    Alembic:
    0:10 Введение в Alembic
    1:35 Установка Alembic
    1:55 Настройка Alembic
    48:01 Исправление для настройки подключения к ДБ
    8:35 Создание первой миграции
    14:24 Выполнение и откат миграций
    40:22 Слежение за версиями миграций
    Создание моделей:
    18:00 Создание User
    44:52 Добавление строкового представления
    21:18 Создание Post
    22:00 - Значения по умолчанию
    23:02 - Создание внешнего ключа
    25:51 Добавление связей между моделями (relationship) "один ко многим" и использование TYPE_CHECKING
    29:42 Создание Profile, добавление связей "один к одному"
    31:48 Использование Mixin (с использованием declared_attr) для избежания дублирования кода.
    CRUD:
    42:52 create_User
    46:18 рефакторинг Config.py
    48:17 get_User (два варинта)
    51:43 create_Profile
    54:10 show_Users_with_Profiles
    55:44 Использование option(JoinedLoad())
    58:10 create_Post
    1:01:18 get_Users_with_Posts
    1:02:41 Использование Unique и option(SelectInLoad())
    1:06:27 get_Post_with_Users
    1:08:24 get_User_with_Posts_and_Profile
    1:10:22 get _Profile_with_User_and_Posts - вложенные и комбинированные join() (для подгрузки данных и фильтрации )
    1:13:31 - ИТОГИ
    PS опции joinedload() используем для отношения "один к одному", а selectinload() для отношения "один ко многим"

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Ооо, крутяк, спасибо
      Сейчас проверю и добавлю в описание

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +3

      PS: joinedload() используем для _подгрузки_ отношения ".. к одному", а selectinload() для _подгрузки_ отношения "... ко многим". не важно, что слева. потому что может быть "один ко многим", а может быть и "многие ко многим", и всё равно надо использовать selectinload, потому что это всё "ко многим"

    • @VitalyTolmachev
      @VitalyTolmachev Год назад +1

      @@SurenKhorenyan Спасибо , за уточнение.

  • @krevedko_krevedkin
    @krevedko_krevedkin Год назад +9

    Очень хорошая подача материала, и много полезной информации, которую не встречал на других каналах, продолжай в том же духе, лайк)

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Спасибо большое! Рад, что было полезно 🥰

  • @Alex-zl7wg
    @Alex-zl7wg Месяц назад +1

    Превосходная подача материала! Всё подробно и в то же время ничего лишнего. Преподавать ваше призвание! Спасибо за курс.

    • @SurenKhorenyan
      @SurenKhorenyan  Месяц назад

      @@Alex-zl7wg пожалуйста! Рад, что вам понравилось 🥰

  • @danilhz5166
    @danilhz5166 Год назад +6

    Ты научил меня Python 2 года назад))
    Я смотрел твой курс на одной из образовательных платформ
    Чувак, ты лучший! Очень рад увидеть твой контент на RUclips.

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +1

      Как приятно 😊
      Очень круто! В какой сфере сейчас работаете? Удалось сделать программирование основной занятостью?
      Спасибо большое, очень приятный отзыв 🥰
      Очень рад трудиться 💪

  • @maxbob-mw9lr
    @maxbob-mw9lr Год назад +3

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

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +2

      Спасибо большое, очень приятно! Рад трудиться 🥰
      Дальше больше 💪

  • @bondarden
    @bondarden 10 месяцев назад +6

    Других авторов приходится ускорять на 2х. Здесь же пришлось замедлять :) Спасибо! Ценный материал и отличная подача!

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      Хах, бывает 😅
      Супер! Рад

  • @АлексейПопович-й6ш
    @АлексейПопович-й6ш 9 месяцев назад +2

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

    • @SurenKhorenyan
      @SurenKhorenyan  9 месяцев назад

      Класс, пожалуйста! Рад, что вам понравилось.
      Дальше больше, спасибо

  • @РусланТитаренко-ф6я
    @РусланТитаренко-ф6я 14 дней назад +1

    Казалось бы, те же самые 15 минут на объяснение алембик, но без воды и на понятном языке (спокойно все применил в своем проекте). Благодарю.

    • @SurenKhorenyan
      @SurenKhorenyan  14 дней назад +1

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

  • @РоманГварамадзе
    @РоманГварамадзе Год назад +2

    Классный контент! Смотрел твои лекции в курсе по Django. Очень доступно и понятно. Очень обрадовался, когда стал замечать твои видео на ютюбе.

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Круто, спасибо! Рад трудиться! 🥰

  • @Ratmirsh
    @Ratmirsh 8 месяцев назад +1

    Спасибо за эти видео! Читать доку к алхимии то еще удовольствие. Все понятно, только быстро, приходится пересматривать.
    Не первый раз твои видео появляются в поисковой выдаче. Это знак, так держать!)

    • @SurenKhorenyan
      @SurenKhorenyan  8 месяцев назад

      Кайф, пожалуйста! Рад, что вам нравится

  • @marselmikhaylov8049
    @marselmikhaylov8049 8 месяцев назад +2

    Все супер! 👌👍👍👍
    За такое относительно короткое время просто море информации, которое нужно будет переварить
    однозначно продолжаю изучение на твоем канале ✌

    • @SurenKhorenyan
      @SurenKhorenyan  8 месяцев назад

      Кайф, спасибо! Я рад, что вам понравилось 😊

  • @crayscraysovich6017
    @crayscraysovich6017 3 месяца назад +1

    Смотрю уже пару дней. Пока это видео оказалось самым тяжелым, но не менее информативным и познавательным. Спасибо за контент!

    • @SurenKhorenyan
      @SurenKhorenyan  3 месяца назад

      @@crayscraysovich6017 держитесь! Рад, что вам нравится. Пожалуйста ☺️

  • @ДмитрийСмирнов-щ7ю
    @ДмитрийСмирнов-щ7ю 2 месяца назад +1

    Это великолепно! Вы отлично объясняете. Огромное спасибо за труды!

    • @SurenKhorenyan
      @SurenKhorenyan  2 месяца назад

      @@ДмитрийСмирнов-щ7ю класс, пожалуйста! Очень приятно 🥰

  • @ЛинаХамидуллина-ю6л
    @ЛинаХамидуллина-ю6л 7 месяцев назад

    Сурен, мне очень нравятся все ваши видео. подписалась не задумываясь.🔥
    Очень много информации в каждой ваше фразе. Пересматриваю по несколько раз, чтобы ничего не упустить и каждый раз открываю что-то новое для себя!
    Спасибо вам за бесценную информацию, за ваш труд. 🥰💪

    • @SurenKhorenyan
      @SurenKhorenyan  7 месяцев назад

      Кайф, пожалуйста!
      Очень приятно, спасибо за такой теплый и подробный отзыв 😊

  • @yurypaulouski1593
    @yurypaulouski1593 8 месяцев назад +1

    Сурен, Вы невероятны! Вы первый преподаватель, кого я не только не смотрю на скорости 1,25-2, но даже пытался смотреть на 0,75. А ведь я чаще смотрю на иностранных, чужих для меня языках. Сумасшедшая скорость и качество. Так держать! P.S. надеюсь в реальной жизни Вы не такой быстрый :)

    • @SurenKhorenyan
      @SurenKhorenyan  8 месяцев назад +1

      Спасибо!
      Хах, потихоньку начинаю говорить медленнее, было много жалоб на скорость.. 😅

  • @pitonism
    @pitonism Год назад +1

    Привет. Очень понравилась подача материала. Пожалуйста, не останавливайся по поводу FastAPI. Хотелось бы послушать тебя по поводу аутентификации, авторизации, правам доступа и т.д.

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +2

      Спасибо, приятно! Обязательно будет продолжение. В одном из следующих видео будет и про авторизацию

  • @turbotyoma
    @turbotyoma 10 месяцев назад +1

    Крайне полезная информация! Часто не успеваю за твоим ходом мысли)) Спасибо, Сурен!

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      Пожалуйста!
      Хах, можно замедлить видео 😅

    • @turbotyoma
      @turbotyoma 10 месяцев назад

      @@SurenKhorenyan 😌

    • @tagabenz9808
      @tagabenz9808 10 месяцев назад

      Или по ноздре дать

    • @SurenKhorenyan
      @SurenKhorenyan  9 месяцев назад

      @@tagabenz9808 осуждаем насилие, не надо ничего подобного

  • @vas1stdas
    @vas1stdas Год назад +1

    Супер полезная серия видео, пожалуйста, продолжай! Очень толково и глубоко разбираешь вопрос, не видел таких подробных видео на других каналах, спасибо огромное!

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Пожалуйста!
      Круто, спасибо большое за отзыв! После таких сообщений очень хочется продолжать 🥰

  • @сергейбогданов-щ2с
    @сергейбогданов-щ2с 5 месяцев назад +1

    Лучшее объяснение по FastAPI!
    Сурен, спасибо большое!
    Будут ли видео про (docker + fastapi) ?

    • @SurenKhorenyan
      @SurenKhorenyan  5 месяцев назад

      Кайф, пожалуйста!
      Да, будет когда-то. Не в ближайшее время

  • @alexchto
    @alexchto 2 месяца назад +1

    Это легендарно, Сурен. Спасибо!

    • @SurenKhorenyan
      @SurenKhorenyan  2 месяца назад

      @@alexchto класс, пожалуйста!

  • @anywaysadness6024
    @anywaysadness6024 3 месяца назад +1

    Это было сложно и просто одновременно. Спасибо за контент.
    Параллельно прохожу твой курс на Merion academy!

    • @SurenKhorenyan
      @SurenKhorenyan  3 месяца назад

      @@anywaysadness6024 пожалуйста!
      Круто, удачи с прохождением 😊

  • @mailvoodoo
    @mailvoodoo 9 месяцев назад

    Отличная подача. Хорошая скорость. Отлично выстроена последовательность в объяснении материала. Спасибо! На пару голов выше множества каналов. 👍

    • @SurenKhorenyan
      @SurenKhorenyan  9 месяцев назад

      Кайф, очень приятно, спасибо!
      Пожалуйста, рад, что вам понравилось.

  • @MrRayder7
    @MrRayder7 Год назад +1

    Спасибо за материал, одна из лучших подач по FastAPI. Очень жду новых роликов!

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Круто, пожалуйста!
      Спасибо за отзыв
      Новые ролики обязательно будут

  • @bezborodovanton
    @bezborodovanton Год назад

    Супер крутой контент и подача. Всё максимально чётко, настройка конфигов, практичные кейсы, современные инструменты и подходы. Большое спасибо за ваш труд!

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Пожалуйста! Очень приятно получать такие отзывы, это мотивирует делать новые видео. Спасибо и вам!

  • @nuclearrocket
    @nuclearrocket 9 месяцев назад

    Спасибо огромное за качественный контент, разложенный по полочкам. Буду орать от радости, если запилите видео про использование Dash Plotly c SQLAlchemy 2.0.

    • @SurenKhorenyan
      @SurenKhorenyan  9 месяцев назад

      Пожалуйста! Рад трудиться 🥰
      Не знаком с этой штукой, надо будет изучить. Спасибо за наводку

  • @messiaheugene
    @messiaheugene Год назад +1

    Сурен, спасибо большое. Как всегда супер полезно.
    Как по мне, ваши видео нужно к документации sqlalchemy прикладывать)

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

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

  • @JIJI-zv1qp
    @JIJI-zv1qp 10 месяцев назад +1

    Ты супер братан. Впервые ввижу такой детальный разбор, хотя посмотрел уже не мало уроков про fastapi. Продолжай в том же духе. Ждем новые ролики. Прошу в следующих уроках учесть логирование мидлварки и про типы Проектирования приложения mvc onion architecture и clean architecture

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      Супер, пожалуйста!

  • @NikitaProfir
    @NikitaProfir Год назад +1

    Спасибо за контент! Это действительно очень полезный материал. Очень интересна тема асинхронной работы питона. На Ютубе очень мало хорошего контента по данной теме, по этому не совсем понятны некоторые шаги😅

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Круто, пожалуйста! Рад трудиться.
      Если вдруг что-то не поняли в видео, обязательно пишите комментарии, в новых видео буду всё разбирать

  • @maksimvlaskin7305
    @maksimvlaskin7305 Год назад +2

    Уровень космос! Сурен, пожалуйста запилите пару выпусков по авторизации и аутентификации FastApi! Спасибо за видос ! Утром поставлю лайк! Очень качественный контент! Круто!

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +1

      Класс, спасибо большое за такой яркий отзыв! Мне очень приятно 🥰
      Обязательно будет по авторизации через пару роликов (наверное, в следующем месяце)

    • @maksimvlaskin7305
      @maksimvlaskin7305 Год назад +1

      + spasibo!@@SurenKhorenyan

  • @gedal9841
    @gedal9841 6 месяцев назад +4

    Да уж. Всегда встречался с проблемой при просмотре подобных видео, что информации полезной как таковой нет, наоборот - больше вопросов возникает. Тут совсем иначе: информации так много, что приходится делать перерывы на "переваривание" информации, ибо понимание дается очень трудно (хотя, чего я хотел, когда еще совсем недавно не знал, что за return у функций, лол).

    • @SurenKhorenyan
      @SurenKhorenyan  6 месяцев назад

      Хах, сочту за комплемент 😅
      Рад, что ролик был вам полезен!

  • @dzfggghbartsfdtbsty8898
    @dzfggghbartsfdtbsty8898 6 месяцев назад +1

    "...так, давайте в этот раз наберём СЕМЬДЕСЯТ лайков..." :D
    Реакция: положительная.
    Рад, что порядок фидбека не оправдал ожидания, в лучшую сторону)
    Приятно, когда хороший материал получает заслуженное внимание.
    С другой стороны, немного страшно от количества интересующихся - успокаиваю себя тем, что большинство уже нашло работу и просто подтягивает те знания, которые уже и так должны были иметься (:

    • @SurenKhorenyan
      @SurenKhorenyan  6 месяцев назад

      Хах. Ага, такие времена были, даже до сотни лайков не доходило. Рад, что тема зашла, и ролик продолжает набирать просмотры и лайки.
      Всё ок, дефицит огромный, так что продолжайте изучать, разбираться, и обязательно найдёте хорошее место работы

  • @n-2094
    @n-2094 Год назад

    Очень понятное и четкое видео. Спасибо за материал. Хочется такого побольше)

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +1

      Круто, пожалуйста! Очень приятно получать такие отзывы
      Обязательно буду продолжать 🥰

  • @ДмитрийШадрин-у1ф

    Отличный материал для русскоязычного сообщества, подобных качественных разборов можно посчитать по пальцам, желаю успеха в продвижении канала👍

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Спасибо большое! Рад трудиться 😊

  • @saitaro
    @saitaro 11 месяцев назад +1

    Очень здорово, спасибо! Добавил в закладки весь плейлист. Сурен, про деплой этого приложения сделаешь видео?

    • @SurenKhorenyan
      @SurenKhorenyan  11 месяцев назад +1

      Круто, пожалуйста!
      Про деплой будет, думаю. Надо только добраться

  • @Arsenijr
    @Arsenijr Год назад +1

    единственный полезный канал на ютуб

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      спасибо! рад трудиться 😅

  • @deskentunhuman3336
    @deskentunhuman3336 11 месяцев назад

    Отличный материал и подача! Спасибо, продолжай в том же духе!

    • @SurenKhorenyan
      @SurenKhorenyan  11 месяцев назад

      Класс, благодарю! Очень приятно 🥰

  • @oskalov3884
    @oskalov3884 10 месяцев назад +1

    Максимально понятно всё, спасибо!

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

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

  • @romantretyakov6243
    @romantretyakov6243 Год назад +1

    Спасибо за видео, отличная подача материала

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Пожалуйста! Рад, что полезно 😊

  • @ВладиславБалута-й3в

    Спасибо за видео! Жду продолжение)

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Пожалуйста! Обязательно будет 😊

  • @GAVNO
    @GAVNO 10 месяцев назад +1

    огонь вообще, без всяких пык мык все по делу

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      круто, спасибо! рад стараться 🥰

  • @MrStalkMiner
    @MrStalkMiner Год назад +1

    супер, было очень полезно освежить в памяти базу по sqla :)

  • @ГеоргийФедотовских-и1р

    Самый лучший канал!! Хотелось бы видио про аунтефикацию в fast api🎉

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Спасибо большое! Очень приятно 😊
      Обязательно будет про аутентификацию

  • @vitpetro4642
    @vitpetro4642 11 месяцев назад +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  11 месяцев назад

      Пожалуйста!
      Хорошая тема, надо будет рассмотреть обязательно

  • @AS-fk5fw
    @AS-fk5fw 11 месяцев назад +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  11 месяцев назад

      Класс! Пожалуйста
      Тема One Dark

  • @veilovv
    @veilovv 11 месяцев назад +1

    Привет, а будет видео по Celery? Очень интересно послушать

    • @SurenKhorenyan
      @SurenKhorenyan  11 месяцев назад

      Привет! Ага, обязательно будет

  • @Qustoos
    @Qustoos 10 месяцев назад +1

    Т.е. selectinload и joinload используются в зависимости от связи между таблицами? В случае связи один ко многих следует использовать selectinload чтобы избавиться от костылей с unique?
    И еще вопрос: а что лучше из них? Один запрос с джоином(или несколькими джоинами одновременно) или несколько запросов без джоинов используя данные о связях как в показанном на видео примере, где второе селект использовал айди пользователей, полученных на n-1 запросе.
    Видео огонь. 👍👍👍👍👍

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      Спасибо!
      Да, разница в том, что связь ".. ко многим" нужно подгружать через selectinload
      Но, на самом деле, связь ".. к одному" тоже можно, но зависит от ситуации, где-то это просто неуместно. Уместно когда нам надо всего несколько записей подтянуть в связке к огромному количеству. Например, три отдела и сотни-тысячи сотрудников. И хоть отношение сотрудника к отделу это "к одному" (у сотрудника только один отдел), тут можно подгрузить через selectinload, чтобы вытащить эти три отдела в новом запросе, а не цеплять к каждому сотруднику отдельно в SQL

    • @Qustoos
      @Qustoos 10 месяцев назад

      @@SurenKhorenyan понял. Спасибо за объяснение.

  • @RusSpaceMarine
    @RusSpaceMarine Год назад +1

    Отличный материал, большое спасибо! На будущее - расскажи про новый миксин в алхимии 2.0 "MappedAsDataclass"

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +1

      круто, рад стараться! спасибо за рекомендацию, да, тоже надо будет рассказать про это

  • @valeria_novogran
    @valeria_novogran 11 месяцев назад +1

    Здравствуйте!
    спасибо за ролик :)
    может захотите сделать про тестирование кода, pytest - было бы очень круто!

    • @SurenKhorenyan
      @SurenKhorenyan  11 месяцев назад

      класс, пожалуйста! да, про pytest обязательно будет

  • @hovharoyan3262
    @hovharoyan3262 7 месяцев назад +1

    Спасибо Сурен!

  • @andreykorolev8643
    @andreykorolev8643 13 дней назад +1

    Сурен подскажи пожалуйста, почему ты используешь в крудах core алхимию, а не до конца используешь декларативные методы, например, session.query(User).filter_by(username=username). Есть какой то профит или привычка?

    • @SurenKhorenyan
      @SurenKhorenyan  13 дней назад

      @@andreykorolev8643 привет! Это старый стиль, я раньше так писал. Начиная с 1.4 и 2.0 принято универсальный statement писать. При этом я использую ORM подход, например тот же select(User).where(User.username == 'john') это вполне ORM подход, мы же обращаемся к свойствам модели и получаем в ответ модель

  • @РоманГварамадзе
    @РоманГварамадзе Год назад +1

    Было бы круто запилить какой-нибудь курс по FastAPI и подробно поковыряться в сложностях фреймворка.

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Уже думаю об этом, так как приходят запросы 😅

  • @lajilit
    @lajilit 3 месяца назад

    Видео просто супер полезное, спасибо огромное!

    • @SurenKhorenyan
      @SurenKhorenyan  3 месяца назад

      @@lajilit кайф! Пожалуйста 🥰 очень рад

    • @lajilit
      @lajilit 3 месяца назад +1

      @@SurenKhorenyan Скажите, а у вас есть где-то видео по поводу настройки админки на фаст-апи или шаблонов? Я занимаюсь переносом проекта джанго, на фаст АПи, там и то, и другое нужно, пока не понимаю, откуда начать

    • @SurenKhorenyan
      @SurenKhorenyan  3 месяца назад

      @@lajilit приходите в тг чат, там обсуждали админку не так давно, по горячим следам можете спросить.
      И я бы там обсудил вашу ситуацию, насколько вообще нужно заниматься переписыванием с Джанго на что-то

  • @iRespectOnlyYen
    @iRespectOnlyYen 11 месяцев назад +2

    ааа чувак какой же ты крутой

    • @SurenKhorenyan
      @SurenKhorenyan  11 месяцев назад

      Спасибо! Очень приятно 😊

  • @gogalaba
    @gogalaba 6 месяцев назад +1

    Очень полезное видео, очень помогло. Жаль не рассмотрена работа с несколькими схемами, у меня обе ноги прострелены 😅

    • @SurenKhorenyan
      @SurenKhorenyan  6 месяцев назад

      Рад, что помогло! А что про несколько схем? У вас есть пример? Несколько разных MetaData? Или несколько разных объектов а алхимии? Такие ролики дальше

    • @gogalaba
      @gogalaba 6 месяцев назад +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  6 месяцев назад +1

      А, вы про эти схемы.. круто, что удалось разобраться! Если придёте в чат в телеграм и поделитесь кодом, будет вообще супер 😊

  • @ВикторГлухов-р3ь
    @ВикторГлухов-р3ь Год назад +1

    Спасибо за лекцию, вообще круто! Буду ждать развития темы!)
    Вопрос:
    1:04:05 и далее, выдача в терминале
    -Post(id=,,, username='SQLA 2.0' ....
    это же не юзернэйм на тайтл должен быть?
    или я что-то неверно понял или подскажи пожалуйста как вывести корректно?!

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Пожалуйста! Мне очень приятно, что вам понравилось. Продолжение уже в монтаже.
      Хаа, да, действительно, при печате информации о посте должен быть title, а не username. вот это у вас внимательность!
      ошибка вот тут в формировании строки github.com/mahenzon/micro-shop/blob/1d5b9820e2185786599748047bd64fe232079e7c/core/models/post.py#L21
      я указал `username={self.title!r}`, а должно быть `title={self.title!r}`
      поправлю в одном из следующих выпусков 🙂

    • @ВикторГлухов-р3ь
      @ВикторГлухов-р3ь Год назад +1

      @@SurenKhorenyan спасибо, вот тут я и спалился в том, что не знал для чего этот дандерметод))))))

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      @@ВикторГлухов-р3ь хах, да ничего страшного. вот теперь запомните, что это для приведения объекта к строке 🙂

  • @twenty1th
    @twenty1th Год назад +1

    Хорошее видео. Спасибо

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

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

  • @antonzuzlov2046
    @antonzuzlov2046 Год назад +1

    Привет, спасибо за видос. только немного не понял чем selectinload лучше joinedload при запросе ко многим. Сам пока тоже не разобрался до конца с точки зрения производительности как будет лучше и как отрабатывает под капотом unique

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Привет, пожалуйста.
      Он лучше тем, что делает дополнительный запрос, чтобы вытащить только недостающие данные. А joinedload грузит в том же запросе, из-за чего дублируются данные в ответе. Метод unique тут помогает правильно прочитать ответ, но просто я придерживаюсь правила, что грузить "ко многим" лучше через selectinload

  • @vadimv1501
    @vadimv1501 10 месяцев назад

    Практический вопрос. Если в BaseModel прописать колонку id, то ее отнаследуют все другие таблицы (и это хорошо), но id будет последней колонкой, это не очень приятно. как сделать так чтобы она была первой (или так работает наследование, и ничего не сделать?)?

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      угу, тоже замечал, что колонка генерируется не первой. при желании сделать отображение в БД в таком порядке, чтобы колонка id шла первой, можно в alembic миграции подвинуть создание колонки id в самое начало create_table. это придётся делать для каждой создаваемой таблицы, но зато получите ожидаемое отображение

  • @Борщкот
    @Борщкот Год назад

    Крутая серия видео по фастапи. Было бы очень интересно посмотреть на регистрацию и авторизацию например через fastapi-users.

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +1

      Спасибо!
      Планирую про авторизацию рассказать через пару выпусков

    • @Борщкот
      @Борщкот Год назад

      @@SurenKhorenyan Спасибо, буду ждать.

  • @maxsuprun5371
    @maxsuprun5371 11 месяцев назад +1

    🔥🔥🔥🔥

  • @ruria_coda
    @ruria_coda Год назад

    Спасибо за подкаст, под который я сломаюсь с настройкой wsl

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      пожалуйста! а почему нужно сломаться? да и настройка wsl несложная же

  • @borzxoYT
    @borzxoYT Год назад +1

    Если я правильно понимаю, то названия таблиц в бд формируются благодаря методу __tablename__, который мы переопределили в классе Base. Правильно? Если это так, то я чуть поздно допёр до этого и оставлял в каждой новой модели __tablename__, выходит это бесмысленно.

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      На основе этого свойства создаётся имя таблицы, да. Вполне нормально объявлять для каждой модели это значение отдельно. Но если можно автоматизировать, то почему бы и нет. Для этого и используется declared_attr

  • @АнтонМиндлин
    @АнтонМиндлин 9 месяцев назад +1

    👌

  • @Паша-н9ь
    @Паша-н9ь Месяц назад +1

    спасибо!

  • @vasopython1547
    @vasopython1547 4 месяца назад +1

    спасибо❤

  • @ocean6305
    @ocean6305 Год назад

    Классное видео спасибо за контент. По М2М планируете сделать разбор ?

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Пожалуйста, рад трудиться!
      Обязательно будет видео по м2м

  • @dotco22
    @dotco22 9 месяцев назад

    Спасибо за видео!
    А простое использование Join, вне options(), работает иначе?

    • @SurenKhorenyan
      @SurenKhorenyan  9 месяцев назад +1

      Да, обычный .join скорее для фильтрации. А через options joinedload / selectinload это для подгрузки связанных сущностей в мапперы

    • @dotco22
      @dotco22 9 месяцев назад

      @@SurenKhorenyan не будет ли тогда замедления при использовании в одном запросе двух типов джоина?

    • @SurenKhorenyan
      @SurenKhorenyan  9 месяцев назад +1

      @@dotco22 заметного замедления не наблюдается

  • @VitalyTolmachev
    @VitalyTolmachev Год назад

    Подскажите как в Pycharm вывести в редакторе подсказку "наименования параметров функции"? Как здесь ruclips.net/video/LKkn-2FId8w/видео.html - "table_name", "__name_pos" и т.д.

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      привет! это в новом интерфейсе по умолчанию активно. вы уже включили новый интерфейс? я в одном из предыдущих видео показывал, как активировать

  • @vasopython1547
    @vasopython1547 4 месяца назад +1

    top!

  • @mandozor
    @mandozor Год назад

    Отличное видео! Можно вопрос? Где та грань использования асинхронного доступа к базе данных и синхронного. Это количество запросов к базе или какие то ещё есть факторы? Спасибо!

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +3

      Круто, пожалуйста! Рад, что понравилось
      Асинк надо начинать использовать только с того момента, когда у вас выросла нагрузка на приложение, и запросы долго обрабатываются. Это сотни запросов в секунду от пользователей. Так что в простых личных проектах можно и на синхронщине писать
      Однако, если вы сейчас придёте на работу, где надо писать веб приложение, то там скорее всего будет именно асинк подход. В коммерции сейчас так модно

    • @mandozor
      @mandozor Год назад

      Спасибо за ответ! Успехов Вам!

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +2

      @@mandozor пожалуйста! будут ещё вопросы, обязательно пишите. и вам спасибо ☺

  • @максимгостев-р3ь
    @максимгостев-р3ь 3 месяца назад +1

    Добрый день а как настроить для alembic схему по умолчанию что бы он там проверял таблици и при наличии в миграциях прописывал апгрейды, а то в постгресе он всё время пытается в паблик схеме всё делать

    • @SurenKhorenyan
      @SurenKhorenyan  3 месяца назад

      схему, отличную от public, можно указать на модели, вот пример gist.github.com/h4/fc9b6d350544ff66491308b535762fee

    • @максимгостев-р3ь
      @максимгостев-р3ь 3 месяца назад +1

      @@SurenKhorenyan на модели я поставил схему но тогда алембик ругается что не может найти Foreign key так как по умолчанию он пытается работать с public

    • @SurenKhorenyan
      @SurenKhorenyan  3 месяца назад

      @@максимгостев-р3ь значит вы не указали схему в отношении. Тип так: 'myschema.user.id', приходите с вашим кодом в чат в телеграм, там подскажут.

    • @максимгостев-р3ь
      @максимгостев-р3ь 3 месяца назад

      @@SurenKhorenyan а можно ссылочку на чат просто я тока в "канале Мурена" а там писать нельзя

  • @datski_live
    @datski_live 11 месяцев назад +1

    А почему бы не разделить видео на несколько частей?

    • @SurenKhorenyan
      @SurenKhorenyan  11 месяцев назад +2

      В первую очередь мне так проще, так как почти все примеры связаны в рамках видео
      Во вторую сложнее, так как платить монтажеру за два ролика, а не за один, а я из своего кармана плачу за монтаж и превью

    • @Qustoos
      @Qustoos 10 месяцев назад +2

      @@SurenKhorenyanничего не надо делить. Делайте как вам удобно.

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      ​@@Qustoosспасибо 😊

  • @xjpfxei
    @xjpfxei 7 месяцев назад +1

    В каких случаях оправдано использование не асинхронной алхимии?

    • @SurenKhorenyan
      @SurenKhorenyan  7 месяцев назад

      Всегда когда вам не хочется работать с асинком

    • @xjpfxei
      @xjpfxei 7 месяцев назад +1

      @@SurenKhorenyanв каких случаях может не хотеться?
      Я сейчас не знаю ни то, ни другое.

    • @SurenKhorenyan
      @SurenKhorenyan  7 месяцев назад

      Значит используйте синк. В асинк можно лезть только после опыта в синк. Тем более, что в алхимии в этом плане различия минимальные (по подходу)

  • @dmitryvladimirov611
    @dmitryvladimirov611 Год назад

    А получается мы не можем использовать новые модели Post, User, Profile для аннотации типов при post запросах в эндпоинтах?

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Для аннотаций в fastapi views не подходят модели алхимии, fastapi через них не сможет валидировать данные

    • @dmitryvladimirov611
      @dmitryvladimirov611 Год назад +1

      @@SurenKhorenyan спасибо! А есть способ не дублировать все поля всех таблиц еще и для pedantic? Может уже придумали как связать это все?

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +1

      @@dmitryvladimirov611 да! Есть такая штука SQLModel, как-нибудь сделаю по ней видео. Объединяет алхимию и pydantic. Но у этого есть и свои минусы

  • @СергейТравкин-ь1щ
    @СергейТравкин-ь1щ 3 месяца назад +1

    У меня не получилось изменить схему базы данных и создавать миграции.
    как это сделать?

    • @SurenKhorenyan
      @SurenKhorenyan  3 месяца назад

      Приходите в тг чат, показывайте, поможем

    • @СергейТравкин-ь1щ
      @СергейТравкин-ь1щ 3 месяца назад +1

      @@SurenKhorenyan , благодаря видео в чате (кружочек) нашел искусственный интеллект для программистов он и помог
      проблема решилась созданием роли (потом на этой схеме назначьте права для юзера, который используете для программы)
      CREATE ROLE alembic_test LOGIN PASSWORD '123456';
      ALTER ROLE alembic_test SET search_path TO test_schema;

    • @SurenKhorenyan
      @SurenKhorenyan  2 месяца назад

      ​@@СергейТравкин-ь1щ Круто! Молодцы что вы разобрались

  • @danilhz5166
    @danilhz5166 Год назад

    Poetry конечно крутой, но вот если возникает конфликт в файле poetry.lock, как его адекватно смержить?
    По идее мы не должны его трогать, как поступать в таких случаях?

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      poetry lock мы руками не трогаем, поэтому главное чтобы в pyproject toml всё было как нам нужно, а потом в терминале сделать `poetry lock --no-update` чтобы перелочить

  • @plathardstuck28
    @plathardstuck28 10 месяцев назад +1

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

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      Привет! Хах, спасибо
      К сожалению, инициатива тут должна идти сверху, а не исходить от меня.
      Мне понравилось сотрудничать со скилбоксом, так что если по какой-то причине продюсер решит, что нужна перезапись, и придёт ко мне, я вряд ли откажусь 🙂

  • @BestDron
    @BestDron Год назад

    Что думаете про sqlmodel framework. Можно ли его использовать в продакшине

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

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

  • @kendric-pau7693
    @kendric-pau7693 Год назад

    в каком видео была настройка black?

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      привет! в предыдущем видео в самом начале было
      ruclips.net/video/KWu_RyTKh1s/видео.htmlsi=K5QYPxzqmm_jrvzE&t=59

  • @VitalyTolmachev
    @VitalyTolmachev Год назад +1

    ruclips.net/video/LKkn-2FId8w/видео.html Почему Алембик поле id в самый конец запихивает? У меня тоже из-за наследования классов , наследуемые поля в самый конец улетают

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад

      Всё верно, дело в наследовании. Сначала алхимия читает колонки с модели, потом с родителя
      При желании можно айди до выполнения миграции сдвинуть в начало в сгенерированном файле. Если охота, конечно 🙂

    • @VitalyTolmachev
      @VitalyTolmachev Год назад +2

      @@SurenKhorenyan В доке по Алхимии нашел вариант лучше, вставлять параметр sort_order:
      class Base(DeclarativeBase):
      __abstract__ = True
      id: Mapped[int] = mapped_column(primary_key=True, sort_order=-10)

    • @SurenKhorenyan
      @SurenKhorenyan  Год назад +1

      @@VitalyTolmachev клёво! Надо будет его в новом видео показать

  • @Munchen888
    @Munchen888 10 месяцев назад

    Друзья, помогите. Как можно сделать первую миграцию, если в таблице уже есть данные?

    • @Munchen888
      @Munchen888 10 месяцев назад

      Лайк под видеоролик поставил 😉

    • @SurenKhorenyan
      @SurenKhorenyan  10 месяцев назад

      здравствуйте. только вручную привести БД и миграции к такому состоянию, будто вы выполняли эти миграции изначально. вручную описать миграции, в бд проставить номер миграции

    • @YGNETATEL_3000
      @YGNETATEL_3000 9 месяцев назад +1

      У меня вообще пустые миргации хотя написал модель! не знаю что теперь делать.

    • @SurenKhorenyan
      @SurenKhorenyan  6 месяцев назад

      Импорты сделали?