SQLAlchemy №9. Relationships. Виды связей, стратегии загрузки.

Поделиться
HTML-код
  • Опубликовано: 4 июл 2024
  • Первый русскоязычный видеокурс о SQLAlchemy! Данный видеокурс основан на книге "SQLAlchemy от чайника к алхимику", которая представляет из себя перевод официального туториала от разработчиков алхимии. Данная книга распространяется бесплатно и общедоступно в двух вариантах:
    PDF-версия: t.me/massonnn_yt/133
    Веб-версия: massonnn.notion.site/SQLAlche...
    Если вы хотите, чтобы я сделал ревью вашего проекта, то напишите об этом в моем дискорде:
    / discord
    Мой телеграмм канал:
    t.me/massonnn_yt
    Таймкоды:
    0:00 - Начало
    0:45 - Виды связей
    1:49 - Таблица ассоциаций (secondary)
    2:30 - Переходим к коду. One-to-one.
    9:44 - Many-to-one
    13:36 - Lazy load и проблема N+1
    14:30 - Many-to-many и таблица ассоциаций
    20:30 - Стратегии загрузки
    24:03 - Замеры разных стратегий. Когда какую использовать?
    30:37 - Кратко о выборе стратегии
    --------------------
    Данное видео было сделано бесплатно, не содержит рекламы и не пытается что-то продавать. Если вам кто-то что-то предлагал, то имейте ввиду - это мошенники.
    Вы можете поддержать автора, если он вам чем-то помог:
    Если вы из России или стран СНГ:
    410011676049152 (yoomoney)
    2200700702094680 (Тинькофф)
    Если вы из Украины:
    5457082270647394 (ПриватБанк)
    Криптовалюты:
    ltc1qm6lx5e8q8ff7hs5ne2yxskhs2jhdl6ludq4ud8 (LTC / Litecoin)
    bc1qfz7399jdqrxkpmmxyetk0frdskwv23k6p4yhdu (BTC)
    0x95643B2702d1C4b965c1451C3f9bAAE7FF35115D (ETH)
    TAc1WsbgAeB3UY4LrsfoshkTNHzTF1zqj5 (Tether USD-T)
  • НаукаНаука

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

  • @deaddarwin-4166
    @deaddarwin-4166 11 месяцев назад +3

    Друг, очень хороший контент. И еще лучше, что есть pdf и web-книга. Посмотрел и прочел. Очень серьезная большая работа тобой проделана. Приятно слушать грамотную речь с примерами. Спасибо тебе.

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

    Спасибо за курс! По делу, без воды

  • @user-nu3ne1jx8j
    @user-nu3ne1jx8j 10 месяцев назад

    хорошее объяснение, спасибо за контент

  • @user-vj8zx8qt9p
    @user-vj8zx8qt9p Месяц назад

    Наконец-то я нашёл это! Спасибо!

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

    Хорошее видео. Ждём alembic.
    Интересно ещё посмотреть вставку данных в несколько таблиц с разными связями между собой.
    И тему каскадов разобрать.

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

      Вставка данных в данном видео была разобрана, остальное делается по аналогии. Тема каскад была мной вынесена из ролика, поскольку слишком много времени на нее уйдет, а пользы она даст не так уж и много. Если человек уже знает SQL (а данный курс предполагает это), то человек уже сможет реализовать несколько каскад силами SQL, например ForeignKey.ondelete или ForeignKey.onupdate

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

    Спасибо
    Очень полезно

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

    Чел спасибо большое

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

    Всё ещё очень ждём видео про alembic. Выпусти пожалуйста :)

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

      Пока оно не в приоритете, но точно будет

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

    Отличная серия роликов, спасибо. Какой в них используется редактор и что за подсветка?

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

      PyCharm Professional, Github Contrast Light

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

    При selectin каскадно загружаются другие связи? Например, если бы у адреса был FK, то при запросе пользователя было бы обращение рекурсивно для всех связей?
    И как в данном случае будет с joinload?

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

      Это зависит от настроек связи для подтягивающихся моделей

  • @user-bf2iw8id4v
    @user-bf2iw8id4v 9 месяцев назад

    Ещё очень хотелось бы посмотреть просложные запросы, если в таблице-связке будут не только id из двух таблиц которые она связывает, а ещё будут например статус, дата и т.д.

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

      в таком случае нужно будет обратиться к функционалу Core и обращаться напрямую к таблице ассоциаций

  • @user-ei1by3ye6o
    @user-ei1by3ye6o 6 месяцев назад

    Срочный вопрос... Никак не найду, как сделать связь по цепочке через 3-4-5 таблиц?
    Пробовал association proxy, но оно будто бы только через 1 прокси-таблицу прокидывает связь, а мне надо через 2-3...
    Например, у меня есть такая цепочка: Grandfather

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

      Типичная связь Many-to-Many. Сделайте таблицу ассоциаций (first, second, type), где type - это кем приходится персона first персоне second. Далее создавайте relationship как в обычной many-to-many, но создайте их несколько чтобы можно было отделить их по типу. Условие на тип добавьте в primaryjoin.

    • @user-ei1by3ye6o
      @user-ei1by3ye6o 6 месяцев назад

      ​@@massonnn Мне казалось, что Many-to-Many - это, когда в обе стороны связь может приводить ко множеству объектов. Например, города и жители: в одном городе живёт огромное число людей, а один и тот же человек может менять переезжать или постоянно жить на 2-3 города... Я даже не смотрел в сторону Many-To-Many.
      Тут ведь у Son только один Father и Grandfather. Вы уверены?

    • @user-ei1by3ye6o
      @user-ei1by3ye6o 6 месяцев назад

      @@massonnn Просто если у Son будет прямая связь (пусть даже через таблицу ассоциаций) с Grandfather, минуя User и Father и созданную цепочку One-To-Many relationships, это создаёт возможность человеческой ошибки.
      Можно указать другого Grandfather, нежели тот, который находится по прямой цепочке. Разве это допустимо? Так-то я просто могу создать relationship в Son и ссылку по FK на Grandfather, да и вообще у всех ссылку эту сделать... Но запросто потом будет путаница, где у Son - один Grandfather, а у его Father и User - другие...
      Неужели нельзя прокинуть связь, основывающуюся на цепочке уже существующих прямых One-To-Many relationships?

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

      @@user-ei1by3ye6o Вы создаете не таблицу ассоциаций между Son-father или father-grandfather, вы создаете таблицу родственных связей, где каждый человек может приходиться каждому другому кем-либо (отец, сын и т.д.). Поэтому здесь применима many-to-many, тем более что у отца может быть несколько сыновей. В случае с отцом у сына, можно добавить CheckConstraint и ограничить появление второго отца у сына. Но всё это все равно в рамках m2m

  • @ceo-s
    @ceo-s 11 месяцев назад

    А что в контексте запросов отражает дисперсия?

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

      Что значит в контексте запросов? Дисперсия это показатель разброса результатов в статистике. Меньше дисперсия - меньше разница между самым большим и самым маленьким результатом в серии.

  • @user-md1xf2bv8w
    @user-md1xf2bv8w 6 месяцев назад

    Видосы топовые, но по просмотру остался важный вопрос - понимание, что такое core не сформировалось. Только досмотрев до таблицы с замерами понял, что core это дикая штуковина, но что ее отличает от ORm - в обоих случаях используется одинаковый синтаксис составления запроса, разница лишь в том, что в Core запросы отправляются через Connection, в ORm через session - эта единственная разница, которую мог заметить

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

      ORM - это надстройка над Core, которая сильнее абстрагирует сущности базы данных, и забирает на себя работу по составлению SQL запросов. В Core запросы мы должны собирать сами с помощью query-билдера. Подробнее о Core говорилось в самом первом ролике курса.

  • @user-bf2iw8id4v
    @user-bf2iw8id4v 9 месяцев назад

    А когда будет продолжение?

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

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

  • @Ramakot-ff3gd
    @Ramakot-ff3gd 5 месяцев назад

    А когда Alembic?

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

      В достаточно ближайшей перспективе

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

    One2many - не, не слышал)))видео явно для нубов)

    • @massonnn
      @massonnn  7 месяцев назад +3

      Видео предполагает что его будут смотреть не самые опытные разработчики