Тёмный

SQLAlchemy: SELECT and UPDATE queries with ORM vs CORE #6 

Артём Шумейко
Подписаться 28 тыс.
Просмотров 15 тыс.
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 инъекций при использовании SQLAlchemy Core, напишем запросы, используя ORM и разберемся, что такое session.flush(), session.refresh() и session.expire()
0:00 - Select запрос через Core
4:09 - Защищаемся от SQL инъекций
7:54 - Update запрос через функцию update()
12:14 - Select через ORM
16:04 - Обновление моделей через ORM
18:33 - flush
22:17 - expire
25:05 - refresh

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

 

18 июн 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 30   
@artemshumeiko
@artemshumeiko 8 месяцев назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Пишу про лайфхаки при поиске работы, рынок труда и способы развития разработчиков в TG канале - подписывайся: t.me/artemshumeiko Вступай в Python-сообщество (здесь можно задать любой вопрос): t.me/python_community_rus
@coryphoenixxx8238
@coryphoenixxx8238 6 месяцев назад
Поправь порядок видосов в плейлисте
@artemshumeiko
@artemshumeiko 6 месяцев назад
спасибо @@coryphoenixxx8238
@7IdE
@7IdE 6 месяцев назад
Такое впечатление, что тут пропущен видос. Про scalars не было вообще ничего, а тут "напомню". И именно объяснение этой штуки меня очень интересовало. Да и Core VS ORM тоже не было...
@asg5511
@asg5511 7 месяцев назад
Очень доступное объяснение. Талант к преподаванию!
@user-zh4ri8op1x
@user-zh4ri8op1x 7 месяцев назад
Супер! Очень интересно и с нетерпением ждем новых!
@emerald2281
@emerald2281 7 месяцев назад
Отличные видео, продолжай в том же духе!
@hunterxvov4ik
@hunterxvov4ik 3 месяца назад
видно, что постарался над курсом. Помню, летом 2023 смотрел твои видео по фастапи и они мне сильно не понравились. В этом же курсе чувствуется опыт и работа. Однозначно лайк
@dima5116
@dima5116 2 месяца назад
Согласен, в том курсе прям постоянно код менялся, четкой структуры как будто не было, здесь эти ошибки исправлены, а может быть я сам уже "дорос". Тоже с удовольствием прохожу этот курс
@user-oc2jv2mt9k
@user-oc2jv2mt9k 7 месяцев назад
Спасибо за урок👍. Отлично объясняешь 🤩. С нетерпением жду тему relationship💪
@artemshumeiko
@artemshumeiko 7 месяцев назад
Спасибо) на следующей неделе уже выйдет первое видео по relationships
@user-oc5sd1jw4n
@user-oc5sd1jw4n 7 месяцев назад
Спасибо, всё подробно обьяснил ! ВОПРОС - а не сброится ли наш primary_key если мы применим метод refresh перед коммитом в функции обновления воркера? и получится так что апдейт будет искать ключи которых не существует..
@scr1pt651
@scr1pt651 5 месяцев назад
Артем, привет! Большое спасибо за курс! Подскажи, пожалуйста, как определить, что лучше для проекта выбрать: SQLAlchemy Core или SQLAlchemy ORM? Что является более ограниченным по возможностям и может у тебя есть какие-нибудь ресурсы, где можно почитать про выбор кора или орм? Заранее спасибо!
@user-jq5rs8hx8j
@user-jq5rs8hx8j 7 месяцев назад
на 9:08 можно в where указывать TableName.column, а не TableName.c.column, по крайней мере в sqlalchemy version >2.0. Мне такой синтаксис больше нравится, так как работает автодополнение и есть подсветка
@artemshumeiko
@artemshumeiko 7 месяцев назад
Если имеем дело с таблицами Table(...), то обязаны указывать .c. Если задаем модель через класс, то да, .c не нужен и есть подсказки в IDE
@vasiliy2396
@vasiliy2396 3 месяца назад
Курс очень нравится, но я не совсем понимаю, если мы используем ORM, то работаем через sessionmaker, а если с Core, то через engine? Или это просто совпадение? Ведь работает и так, и так. В чем отличие и как понять, что использовать? Заранее спасибо)
@artemshumeiko
@artemshumeiko 3 месяца назад
в ORM обязательно использовать сессию, именно она собирает в себя все изменения и при коммите разом отправляет их в базу данных. engine просто исполняет запросы и не способен держать контекст я говорю про session.add(), session.add_all() и, например, user = session.get(User, 1) user.name = "Ivan" session.commit()
@Qustoos
@Qustoos 6 месяцев назад
Выборка через where всегда требует .c. указывать? В документации не нашел конкретно про "c" Кажется что "c" необходим для таблицы созданных через Table, а таблицы через Classname(Base) позволяет к полю id обращаться как к атрибуту модели.
@artemshumeiko
@artemshumeiko 6 месяцев назад
.с нужен только для table, для cte и subquery вроде я упоминаю это в курсе
@xacho86
@xacho86 8 месяцев назад
Хочу обратить внимание, что согласно документации one_or_none() может возбудить ошибку при возврате более одной строки - MultipleResultError (с названием могу путать);
@Biongar
@Biongar 7 месяцев назад
Сделай пожалуйста следующее: Есть допустим таблица User, у него email и username, оба unique=True, вопрос, при добавлении User, если вылетел exception UniqueConstraintFailed, как нам в алхимии понять какое именно поле не прошло проверку на уникальность
@emerald2281
@emerald2281 7 месяцев назад
Мб проверь есть ли юзер по емейлу потом по юзернейму
@Biongar
@Biongar 7 месяцев назад
@@emerald2281 каждый раз 2 лишних запроса писать?
@nateriver8261
@nateriver8261 7 месяцев назад
А как в алхимии решается проблема N+1?
@artemshumeiko
@artemshumeiko 7 месяцев назад
Покажу в видео о relationship. Они будут под номерами 9,10
@natpagle2628
@natpagle2628 7 месяцев назад
привет! я новичок в sqlalchemy да и вообще в питоне, столкнулся с проблемой циклических импортов когда попытался связать 2 модели, есть модель User, есть модель UserRole, в User есть поле roles: Mapped[List[UserRole]], а в UserRole поле user: Mapped[User]. Ну и импортировав необходимые классы получил ошибку. Как вообще грамотно с таким бороться?
@artemshumeiko
@artemshumeiko 7 месяцев назад
достаточно название модели заключить в кавычки: Mapped[List["UserRole"]] и убрать явные импорты -- алхимия дальше разберется :)
@artemshumeiko
@artemshumeiko 7 месяцев назад
ровно так же кстати работают импорты моделей в Pydantic, если встретитесь
@awesomeex5821
@awesomeex5821 13 дней назад
подача конечно хорошая, но дико раздражает вот эти "я тут немного изменил код" или вообще начинаешь говорить про темы которые еще не проходили так как будто мы уже это прошли, уже второй курс смотрю у тебя и дико тригерит что постоянно меняется код вне ролика, приходится потом сидеть разбираться почему что то не работает и тд
@BersGriffith
@BersGriffith 6 дней назад
я бы для ORM подхода добавил with_for_update(): foo = session.query(Foo).filter(Foo.id==1234).with_for_update().one(). Почему? Чтобы на момент обновления строки в таблице она была заблокирована и конкурентная транзакция не смогла ее изменить еще как то.
Далее
SQLAlchemy: Basic SELECT queries #7
13:22
Просмотров 9 тыс.
Stray Kids "ATE" Trailer
02:42
Просмотров 1,8 млн
Lions Tackle Raging River 😲
00:23
Просмотров 2,4 млн
SQLAlchemy: Intro to relationships and ORM #9
20:09
Просмотров 11 тыс.