Тёмный

SQLAlchemy: How to create tables with classes - Mapped + mapped_column #5 

Артём Шумейко
Подписаться 28 тыс.
Просмотров 16 тыс.
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
Сегодня создадим модель в декларативном стиле, а также добавим типизацию ко всем столбцам.
0:00 - Создание связанной с работником таблицы резюме
12:03 - Создание переиспользуемых типов столбцов (крутая фишка)

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

 

15 июн 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 43   
@artemshumeiko
@artemshumeiko 8 месяцев назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
@BersGriffith
@BersGriffith 2 дня назад
важно учитывать, что когда работаете с Base(DeclarativeBase) - модели должны быть тоже все заимпортированы,чтобы они унаследовались от Base и соотвественно методанные заполнились. В противном случае у вас не создатутся таблицы. В примере это сработало из за того, что у автора WorkersOrm уже было импортировано заранее и файл models прочитался.
@constkk3153
@constkk3153 2 месяца назад
Спасибо за Ваш труд...
@AS-fk5fw
@AS-fk5fw Месяц назад
Спасибо за уроки! Про переиспользуемые типы интересно, не встречал на продакшне, но ждал когда вы скажете что id, created_at, updated_at можно вынести в Base и не дублировать в дочерних классах :)
@xesax
@xesax 3 месяца назад
А как вообще лучше делать? например можно в модели сделать ограничение длины строки с помощью String, но также можно при входных данных например через Field тоже сделать ограничение.
@user-gd6wv7qf9f
@user-gd6wv7qf9f 8 месяцев назад
Есть какие то изменения или дополнения по __abstract__
@JxSol
@JxSol 8 месяцев назад
Спасибо за подробные и понятные уроки! А где ссылочка на триггер для onupdate?
@wolftool3868
@wolftool3868 6 месяцев назад
Да @artemshumeiko поставь, пожалуйста, ссылочку)
@user-jf3rv6kh3l
@user-jf3rv6kh3l 3 месяца назад
тоже не нашла ссылку(((
@maxmotors9672
@maxmotors9672 Месяц назад
Итак не все шло так гладко как в уроке и пришлось немного по другому писать чтобы добиться создания таблиц 1. При импорте класса Base с аннотацией из database.py и замене строки в функции создания таблиц на Base.metadata создание таблицы не проходило , были только логи сообщения и не более РЕШЕНИЕ: Импотр класса Base из models.py - хз но почему то сработало но появились новые ошибки 2. server_default=text('TIMEZONE("utc", NOW())') при определении автозаполнения времени ругался на эту строку , якобы Ошибка говорит о том, что в выражении DEFAULT нельзя ссылаться на столбцы РЕШЕНИЕ: замена строки server_default=text('TIMEZONE("utc", NOW())') на server_default=text('now()') В итоге таблицы созданы без ошибок , но осадок непонимания остался
@thatmaks8094
@thatmaks8094 8 месяцев назад
Сделай пожалуйста урок по деревьям в sqlalchemy
@Pawokify
@Pawokify 7 месяцев назад
Артем, а что по поводу миграций? Будет ли освещено как делать миграции при построении таблиц базы с помощью классов и Mapped?
@artemshumeiko
@artemshumeiko 7 месяцев назад
да, Alembic будет в последнем видео #13
@bezborodovanton
@bezborodovanton 8 месяцев назад
Привет, вместо Annotated можно также просто создать классы-миксины, например, CreateUpdateMixin и множественным наследованием миксовать этот класс к моделям, там где это нужно. Ну и для пайдантик схем аналогично. Но фишка с Annotated прикольная) Ещё в дополнение: если юзать Annotated и потом в будущем нужно, например, переименовать поле created_at в что-нибудь другое, например, created_datetime, то придётся переписывать все модели. А если модели наследуются от миксина, то достаточно поменять в одном месте, тем самым мы соблюдаем принцип DRY
@artemshumeiko
@artemshumeiko 8 месяцев назад
Я раньше тоже делал через миксины, но мне оказалось удобнее напрямую указывать типы - всегда перед глазами, когда смотрю на SA или Pydantic модель, а то часто недоумевал, откуда у меня в модели какой-то атрибут взялся. Мб просто не приучил себя смотреть на родительские классы, но пришел к решению писать без миксинов. Хотя в pydantic юзаю наследование, там без него не выжить :) С нарушением DRY отчасти согласен, но современные IDE дают за пару кликов переименовать атрибут во всех классах, поэтому, считаю, что можно через Annotated писать
@sanyakrt8190
@sanyakrt8190 7 месяцев назад
а можете показать пример такого миксина и его использования?
@artemshumeiko
@artemshumeiko 7 месяцев назад
​@@sanyakrt8190 class CreateUpdateMixin(Base): created_at: Mapped[datetime] = .... updated_at: ..... class User(Base, CreateUpdateMixin): id: ... name: ... по итогу у User будут созданы еще столбцы/атрибуты created_at и updated_at
@xewuss3750
@xewuss3750 6 месяцев назад
@@sanyakrt8190, если поле используется во всех классах, то можно его указать прямо в классе Base.
@simpleman4790
@simpleman4790 8 месяцев назад
Когда продолжение? Даже на бусти только 5 урок.
@antigame99
@antigame99 8 месяцев назад
За вами постою.
@artemshumeiko
@artemshumeiko 8 месяцев назад
на ютубе через месяц :) ну бусти через 1-2 недели
@antigame99
@antigame99 8 месяцев назад
Что-то мне кажется, что Артем не хотел выкладывать в паблик 5 уроков =)ы
@dmitrya6120
@dmitrya6120 8 месяцев назад
Спасибо Вам за классные видео, но nullable это не ноль, а отсутствие значение (пусто). Начинающие могут не так понять)
@user-oc5sd1jw4n
@user-oc5sd1jw4n 8 месяцев назад
Странно, у меня при запуске пишет только Engine BEGIN, Engine COMMIT и вобще ничего с таблицами не происходит, не удаляются и не создаются, как будто код игнорируется. Echo=True не помог, вобще ничего не пишет что связано с частью СУБД
@VladSlon-pt9xx
@VladSlon-pt9xx 8 месяцев назад
Такая же фигня. Пингани как будет ответ
@user-oc5sd1jw4n
@user-oc5sd1jw4n 8 месяцев назад
@@VladSlon-pt9xx о, я думал я один такой удачник)) Может из за того что на винде?
@VladSlon-pt9xx
@VladSlon-pt9xx 8 месяцев назад
@@user-oc5sd1jw4n возможно. уже весь код с репой сверил. ума не приложу, что не так
@user-oc5sd1jw4n
@user-oc5sd1jw4n 8 месяцев назад
@@VladSlon-pt9xx ждём ответ от автора, может подскажет.
@VladSlon-pt9xx
@VladSlon-pt9xx 8 месяцев назад
@@user-oc5sd1jw4n дума все дело в замене metadata_obj на Base.metadata в orm
@user-px4cj3ir8i
@user-px4cj3ir8i 2 месяца назад
Всем привет. Может кому пригодится. При работе с БД через SQLite3 или aiosqlite, то много нюансов. При создании таблиц класс Base перенесите в models, иначе PyCharm ругаться будет. Может, конечно, у меня руки не оттуда растут)))
@user-tm5nm9dp7l
@user-tm5nm9dp7l Месяц назад
Ребят, вот вы для кого эти курсы делаете? Мало того, что эти бараны-разработчики SQLAlchemy из простой вещи сделали кучу хлама в которой без пузыря не разберешься. Мало того, что у них в разных версиях совсем разные функции делают одно и тоже и весь инет забит хрен пойми какими примерами от школо разработчиков. Так нет, вроде вы проф разработчик, а опять туда же понапихали в один курс и классы, и императив и деклоратив и асинхронность и синхронность. А ведь это по факту 4 разных курса и друг с другом никак не пересекаются. И это притом, что разные драйвера от разных баз очень так корявенько работают на одних и тех же примерах. Не правда. Четвертый день в этом разбираюсь. Проще уже на голых запросах можно было код написать. Понаделали сущностей как наркоманы. Я конечно могу к нейронке обратиться. Но и она не может разобраться в этом хламе и дает нерабочий код. А ведь это все вроде должно упрощать жизнь. А тут все наоборот.
@user-rq5gg2uk3s
@user-rq5gg2uk3s Месяц назад
так упрощает и типизирует все, а асинх и синх в одном курсе какая разница, если методы одни и те же, да и опыта у разработчиков алхимии явно по-больше чем у вас, в большинстве проектов использование орм оправдано
@user-tm5nm9dp7l
@user-tm5nm9dp7l Месяц назад
@@user-rq5gg2uk3s Так эти видео для кого? Для начинающих или профи? Профи это нафиг не надо. Он по этим граблям уже прошли сами и выводы сделали. Я тоже четыре дня помучился добавил в снипеты примеры кода где все работает. А какой смысл в видео тогда, если время приходится терять и разбираться в этом бардаке самостоятельно? Кстати видео устарело, там классы уже другие совсем. А это еще больше бардака добавляет.
@user-xh3hz5iv6j
@user-xh3hz5iv6j 8 месяцев назад
всем привет, может кто-нибудь рассказать, как правильно создавать объекты в таблице, у которых используются поля, созданные с помощью enum?! я когда через гет запрос к ним обращаюсь, ругается: fastapi.exceptions.ResponseValidationError: 1 validation errors: {'type': 'string_type', 'loc': ('response', 'product_category'), 'msg': 'Input should be a valid string', 'input': ,
Далее
Regular Season vs. PLAYOFFS part 2 #pavelbarber
00:14
ДЖОНИ КИНУЛ ОСКАРА НА БАБКИ 🤑
01:00
Стоит ли идти в IT в 2024 году?
7:02
SQLAlchemy: How to use Session and ORM
13:37
Просмотров 16 тыс.
Regular Season vs. PLAYOFFS part 2 #pavelbarber
00:14