SQLAlchemy: Advanced RELATIONSHIPS | Indexes | Constraints #10
Вставка
- Опубліковано 9 чер 2024
- 💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡
Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47
Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
Все вопросы по SQLAlchemy обсуждаем в телеграм сообществе: t.me/python_community_rus
Мой телеграм канал о жизни разработчика: t.me/artemshumeiko
Полезные материалы для бэкендера в моем телеграм боте: t.me/ArtemShumeikoBot?start=eXQ
Репозиторий на Github с кодом из видео: t.me/artemshumeiko/28
Поддержать меня и получить ранний доступ к видео можно здесь: boosty.to/artemshumeiko
Relationships - это основа ORM в Алхимии, которую должен знать каждый бэкендер.
0:00 - back_populates
2:15 - backref
3:12 - primaryjoin (измененный join)
9:12 - order_by (сортировка)
9:55 - lazy (типы подгрузки)
11:12 - contains_eager
15:55 - Ограничение подгружаемых связей
18:18 - Индексы и ограничения
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡
Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
Лайк не глядя.Тема очень актуальная и не раскрытая нигде нормально.Спасибо тебе большое )
Как всегда на высоте. Как Прометей, только несешь алхимию людям 😁.
спасибо!
Спасибо большое!
Артем, а вы не планируете в будущем снять видео по ddd архитектуре? я думаю, что это был бы очень полезный ролик.
Я правильно понимаю что в нашем ограничении подгружаемых записей на каждого воркера делается еще один подзапрос в бд чтобы вычленить первое резюме по критериям?
Артём, а это какой-то плагин дает такие подсказки по сигнатуре объекта при наведении мышки на него или VSC по-умолчанию?
по умолчанию в VSCode. Нужно только, чтобы работа велась в виртуальном окружении
В WorkersORM у resumes в relationship(back_populates="worker") указание на worker. В свою очередь, в ResumesORM у worker в relationship(back_populates="resumes") идет указание на resumes, и у нас не возникает в терминале предупреждения от Алхимии.
Но когда мы в WorkersORM добавляем дополнительно resumes_parttime c back_populates="worker", предупреждение в терминале снова появляется.
Что делать в таком случае? Ведь в back_populates нельзя указать resumes и resumes_parttime через запятую.
наверное уже поздно, но просто в дочернем классе укажи еще одно отношение с back_populates="resumes_parttime"
Круто!
спасибо!)
за contains_eager большой респект 👍 неправильно понимал как работает этот метод
рад, что помог вам :)
Артем, запишите пожалуйста про бинарный Json (JSONB) в sqlalchemy
Привет, есть вопрос касаемо relationship между моделями из разных директорий. Как правильно задавать путь в таком случае? Например,
creator: Mapped["src.auth.models.User"] = relationship("User", back_populates="created_rooms")
created_rooms: Mapped[List["src.rooms.models.Room"]] = relationship("Room", back_populates="creator") я задаю две строки(+ForeignKey для one to many), но python почему-то ругается на то что "src" is not defined, пробую изменить директорию ещё на одну выше, всё так же, как мне с этим справиться? Пробовал делать также импорт каждого класса в папку, но получил ошибку circular import( заранее спасибо за все!
просто creator: Mapped["User"]
@@artemshumeiko
orders: Mapped[list["Orders"]] = relationship(back_populates='users')
при таком построении он хочет импорта модели Orders, но тогда будут циклические импорты
Кто может подсказать, как для Sqlite сделать, чтобы в числовое поле по умолчанию при вставке в БД поставлялось максимальное значение + 1? Например, я добавляю две записи, идёт постановка 1, 2. Потом я в третьей записи задаю сам это поле как 10. А потом в следующей автоматчики уже подставляется 11
CREATE TABLE ваша_таблица (
ваше_числовое_поле INTEGER PRIMARY KEY AUTOINCREMENT,
другие_поля TEXT
);
@@sxmrxk нет, нужен не первичный ключ
В примерах между selectinload и contains_eager разница в результатах в том, что
последний использует filter, а не в том, как они работают.
Полагаю, что вы хотели показать, что если использовать filter + contains_eager, то выберутся то те worker'ы, у которых есть конкретные резюме (опять же, из-за фильтра), но contains_eager подгрузит в коллекцию worker'у не все резюме, а только те, что удовлятворяют условиям фильтра.
[contains_eager + filter] В результате worker.resumes = [только с parttime]
[selectinload + filter] В результате worker.resumes = [все резюме]
Раздел в документации: Using contains_eager() to load a custom-filtered collection result
Спасибо за курс). Сколько еще планируется уроков?
Вы все верно написали. Возможно, я не так выразился в видео.
В курсе всего 13 уроков. Последний по Алембику выйдет в течение пары недель
8:01 если нужно указать несколько options, то их можно в один пихать через запятую