Тёмный

SQLAlchemy: How to JOIN tables | CTE | Subqueries | Window functions #8 

Артём Шумейко
Подписаться 28 тыс.
Просмотров 9 тыс.
50% 1

💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: 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
Узнаем, как SQL запросы переносить на язык Алхимии, используем CTE, subquery, aliased и другие функции SQLAlchemy. Это база.
0:00 - Пишем SQL запрос
7:53 - Пишем select запрос при помощи Алхимии

Опубликовано:

 

19 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 40   
@artemshumeiko
@artemshumeiko 8 месяцев назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
@AS-fk5fw
@AS-fk5fw 7 месяцев назад
за 2 часа с огромным удовольствием прошёл этот курс 🔥 и пошел смотреть ещё 4 ролика по раннему доступу с подпиской на бусти. я джун с опытом коммерческой разработки менее года и открыл для себя новое. А точнее я сталкивался с этим на работе, но ты круто объяснил, что добавило мне уверенности. спасибо!
@Katar1x
@Katar1x 8 месяцев назад
Лучший)
@user-sy2zh6nj7g
@user-sy2zh6nj7g Месяц назад
Респект автору. Объясняет аки боженька.
@artemshumeiko
@artemshumeiko Месяц назад
спасибо!
@asg5511
@asg5511 7 месяцев назад
Урок топовый!
@artemshumeiko
@artemshumeiko 7 месяцев назад
спасибо!
@nateriver8261
@nateriver8261 7 месяцев назад
Очень интересно
@artemshumeiko
@artemshumeiko 7 месяцев назад
Спасибо) стараюсь объяснять сложное простым языком
@user-js3yt8lg7o
@user-js3yt8lg7o 7 месяцев назад
Спасибо за урок. Как всегда отличные видео) Не думаешь снять такие же видосы про Redis? Что это такое как с этим работать через питон ну и все такое.
@artemshumeiko
@artemshumeiko 7 месяцев назад
Хорошее предложение) Подумаю
@Elena-ux2kb
@Elena-ux2kb 7 месяцев назад
Артем, добрый день! В одном из видео вы упомянули, что SQLAlchemy может возвращать структуру объекта json, в которой будут отдаваться сгруппированные списки резюме по воркеру. Очень жду эту тему :-)
@artemshumeiko
@artemshumeiko 7 месяцев назад
Про сгруппированные по воркеру будет в следующем видео (9), а про json в 11 видео ;)
@vasiliy2396
@vasiliy2396 3 месяца назад
Хороший курс, кстати алиасы работают для сортировки, только затестил 5:40
@artemshumeiko
@artemshumeiko 3 месяца назад
спасибо, буду знать
@iJaVolo
@iJaVolo 6 месяцев назад
Артём, спасибо за этот курс! Ещё не досмотрел, но пока всё работает))) Задолбался я курить мануалы старые и непонятные, а тут всё понятно) Может уже спрашивали. Ты чередуешь как здороваешься "Всем привет! Меня зовут Артём" и "Всем привет! Меня зовут Артём Шумейко" - это что за такое интересное?))
@artemshumeiko
@artemshumeiko 6 месяцев назад
Вас понял. Постараюсь определиться с приветствием ;)
@iJaVolo
@iJaVolo 6 месяцев назад
@@artemshumeiko А я подумал, что это пасхалка какая или просто шутка)
@shakh555
@shakh555 2 месяца назад
не понимаю для чего нужен aliased, если можно вместо r = aliased(ResumesOrm) просто написать r = ResumesOrm мы же в питоне 😀, питон по умолчанию дает такие возможности, хоть по-русски обзови
@nachtblume6629
@nachtblume6629 4 месяца назад
Можем так делать, нужно так делать, но мы не будем так делать 😂😂😂😂
@100ksmurf-8
@100ksmurf-8 7 месяцев назад
Привет! Спасибо за контент. Пересмотрел все твои видео по FastAPI и алхимии, очень годно объясняешь) Интересный вопрос: насколько реально нужны эти костыли и палки? Я смотрел много видео по алхимии и если честно всё ещё не понимаю: НАФИГА нужно делать такие сложные запросы? Никто не в одном видео этого не объясняет :( Есть asyncpg, который в паре с датаклассами работает сильно шустрее чем алхимия, при этом запросы у тебя -- чистый SQL, который ты можешь использовать по сути везде, не тратя херову гору времени на изучение алхимии. Можешь детально разобрать на кой чёрт нужна алхимия кроме миграций? На сколько я понимаю, алхимию используют для описания моделей таблиц для миграций, но зачем нужно остальное -- не понятно от слова совсем. Подобные запросы через ORM выглядят как сильное усложнение, которое усложняет читаемость запросов и добавляют накладных расходов, а Python и так не самый шустрый язык, и самое главное не понятно ДЛЯ ЧЕГО это усложнение в целом нужно, ведь в asyncpg параметры подставляются в $1, $2 что по идеи так же защищает от инъекций, а валидацию можно проделать через pydantic и датаклассы, сохраняя простоту SQL...
@artemshumeiko
@artemshumeiko 7 месяцев назад
1. Алхимия дает удобный способ строить запросы любой сложности через простые функции select, join, group_by и так далее. В случае с asyncpg нужно писать такой функционал самому либо использовать имеющийся (кстати интересно, что есть на рынке) 2. Алхимия дает удобный способ работы с joinами, когда нам нужна не табличная структура (без вложенностей), а вложенная структура. Например, на фронтенде нужен список всех работников, а также для каждого работника все его резюме. Это простой пример вложенной структуры, бывают и более сложные (больше уровней вложенности, больше вложенностей). Так вот Алхимия делает за нас грязную работу: проходит циклами по табличной структуре и конвертирует ее к приемлемой. Я покажу, как это делается, в следующем уроке. Иначе нам пришлось бы самим проходить циклами внутри циклов (если несколько уровней вложенности) и преобразовывать табличную структуру к вложенной 3. ORM - возможность работать с Python объектами вместо таблиц базы данных. Часть людей использует самые примитивные запросы к базе - чтение, запись, удаление, изменение. Для таких запросов можно плохо понимать устройство базы и SQL, но по-прежнему писать +- адекватные запросы, то есть уровень входа в Алхимию невысокий. Насколько мне известно, часть людей сначала знакомятся с Алхимией/Django ORM, и лишь потом с SQL 4. Типизация дает подсказки в IDE, с которыми разработчик работает эффективнее, допуская меньше ошибок 5. Все пишут SQL код по разному: по разному ставят запятые, переносы строк, кто-то пишет в нижнем регистре, кто-то использует функцию cast, а кто-то :: и так далее. Чтобы не договариваться между всеми разработчиками о стиле написания SQL кода (что довольно сложно), Алхимия предлагает единый стиль написания запросов (см пункт 1), чтобы код был читабельнее. 6. Миграции Алхимия используется не для скорости работы кода, а скорее для скорости разработки и возможности поддерживать код в будущем
@100ksmurf-8
@100ksmurf-8 7 месяцев назад
​@@artemshumeiko Спорные аргументы или я их неправильно понял: 1. Чистый SQL = удобный способ работать с БД. Ведь SQL простой и понятный язык запросов. Пример запроса в твоем видео через ORM сильно сложнее и менее читабельнее, чем твой же SQL-запрос в PGAdmin. Про какой функционал для работы с ayncpg ты говоришь я чуть не понял. Просто пишешь запросы и все. 2. С join можно и с SQL легко работать и читать они будут легче. На счет вложенной структуры не скажу, никогда не делал подобную задачу в SQL, но думаю ради 1 плюса тратить десятки часов времени за изучение построения запросов через алхимию -- слабый аргумент. Я слышал не мало историй, как ребята хорошо зная SQL написали SQL запрос за минуту, а потом тратили часы на изучение как это сделать в алхимии. 3. Python объекты можно сделать через датаклассы для результат запроса к БД. Туда же можно и прикрутить Pydantic одним декоратором. Это связка в 2-3 раза быстрее, чем тоже самое через алхимию... 4. Типизация чего? Результатов запросов? Так мы в любом случае пишет датакласс для выходного результат. Можно использовать датакласс не только для типизации выходных данных, но и инициировать его, передавай результаты SQL-запроса в датакласс. Сильно проще в построении запросов + быстрее работают запросы. 5. Есть конвенция по SQL. Честно признаюсь не все помню, но если задаться целью единый стиль решается очень просто = прочитать всем конвенцию (они дастаточно небольшая к слову) 6. Это понятно, но насколько я понимаю для миграций достаточно описать таблицы. Строить запрос через ORM для этого не обязательно ведь...
@AOF_Materials
@AOF_Materials 2 месяца назад
Привет. У меня в VSCode Intellisense гораздо слабее работает. Где можно посмотреть твои настройки VSCode (расширения и тд)?
@user-yt6zc9vc4v
@user-yt6zc9vc4v Месяц назад
А будет курс по RabbitMQ и взаимодействие между микросервисами и тому подобные?
@artemshumeiko
@artemshumeiko Месяц назад
Курс не уверен, но видео точно будет
@user-nf1lt1gx9w
@user-nf1lt1gx9w 2 месяца назад
Здравствуйте, Артем. Мне кажется проще затащить нужные данные и обработать их, используя pandas. Подскажите, пожалуйста, такой подход может быть использован?, Если нет, то почему?
@artemshumeiko
@artemshumeiko 2 месяца назад
1) pandas медленный. Мы используем SQL, чтобы внутри запроса прописать все нужные фильтры, поля и сортировки. СУБД справляется с этим в разы быстрее 2) pandas не работает с вложенными данными. На фронт или клиенту часто нужно отдать вложенные данные, а pandas именно про работу с табличными данными 3) даже если использовать pandas, SQLAlchemy никуда не уходит, потому что запросы по прежнему нужно как-то писать. И делать это через ORM приятнее и безопаснее, чем через тот же psycopg или любой другой драйвер для написания сырых SQL запросов
@asg5511
@asg5511 7 месяцев назад
Планируется курс с 0 по Python?
@artemshumeiko
@artemshumeiko 7 месяцев назад
нет, моя миссия - покрывать материал, которого мало или вообще нету на ютубе. Курсов по Python очень много
@AlexandrSpirit
@AlexandrSpirit 7 месяцев назад
Пытаюсь разобраться с обычными оконными функциями. Без подзапросов и прочего. Для пагинации нужно добавить в вывод поле total_count - количество строк до применения limit select dr.direction_code, dr.record_code, dr.record_name, dr.record_num, rv.validity, rv.values ,COUNT(*) over () as TotalCount from nsi.direction_record dr left join nsi.record_version rv ON rv.direction_record_id = dr.direction_record_id and rv.validity @> now() :: timestamptz where not dr.is_delete and dr.direction_code = 'стр' order by dr.record_num Простой sql работает. Но на алхимию не перевести
@maisiq
@maisiq 6 месяцев назад
Видимо оговорился, в order by же можно подставлять псевдонимы из селекта
@artemshumeiko
@artemshumeiko 6 месяцев назад
Имеете в виду в алхимии? В sql нельзя
@maisiq
@maisiq 6 месяцев назад
@@artemshumeiko комментарии с ссылками, видимо, удаляются, но так как order by выполняется после select, то в sql можно использовать псевдонимы столбцов с order by, только с ним
@user-cf2lc2rq4v
@user-cf2lc2rq4v 2 месяца назад
А почему нельзя вместо WITH AS обернуть еще раз весь запрос в подзапрос и потом просто сделать еще раз SELECT
@artemshumeiko
@artemshumeiko Месяц назад
Можно)
@user-ps5gn6jl5p
@user-ps5gn6jl5p 6 месяцев назад
Какие 100 тысяч?! Я за 35 тысяч и с питоном и sql и экселем работал... И отчетов куча
@nikito7ka
@nikito7ka 6 месяцев назад
Соболезную
@TAF3000
@TAF3000 4 месяца назад
35 - это зп интерна, хотя в Яндексе/Сбере и другим крупных компаниях стажером платят ещё больше, вроде где-то 70
@user-ps5gn6jl5p
@user-ps5gn6jl5p 4 месяца назад
@@TAF3000 а там это полная ставка!
Далее
SQLAlchemy: Intro to relationships and ORM #9
20:09
Просмотров 11 тыс.
Обзор ЛЮКС вагона в поезде
01:00
Просмотров 763 тыс.
SQLAlchemy: How to use Session and ORM
13:37
Просмотров 16 тыс.
ОКОННЫЕ ФУНКЦИИ SQL за 13 минут
13:46