Добавить в корзинуПозвонить
Найти в Дзене
Computer Pro

ORM SQLAlchemy

Данный курс оказался не без сюрприза. Нельзя было просто так взять и выполнить pip install sqlalchemy и отработать примеры из лекций, ибо в лекциях используется устаревшая версия пакета SQLAlchemy - 1.3.24, а pip install ставит уже принципиально отличающуюся версию - 2.0. Оказалось что весия 1.3.24 тоже не подходит для лекций, в последнем варианте выдает ошибку. Нужна версия 1.4.15 Так что если хотим повторить код из уроков, то ставим с указанием версии: И... всё работает: Но не всё из лекций заработало: В интернетах пишут что версия должна быть не ниже 1.4.15, попробую обновить... И пробую снова запустить тот код, который выдал ошибку: Всё заработало, а про версию модуля SQLAlchemy я вычитал в чате курса: Придя на работу, на следующий день, я подумал - в первой лекции есть ссылка на документацию по SQLAlchemy, это ссылка на версию пакета 1.4.52: Так может есть смысл установить именно эту версию?! На рабочем компе как раз еще не устанавливался данный пакет. Установил, запустил скрипт
Оглавление

Данный курс оказался не без сюрприза. Нельзя было просто так взять и выполнить pip install sqlalchemy и отработать примеры из лекций, ибо в лекциях используется устаревшая версия пакета SQLAlchemy - 1.3.24, а pip install ставит уже принципиально отличающуюся версию - 2.0.

Оказалось что весия 1.3.24 тоже не подходит для лекций, в последнем варианте выдает ошибку. Нужна версия 1.4.15

Так что если хотим повторить код из уроков, то ставим с указанием версии:

-2

И... всё работает:

-3
-4

Но не всё из лекций заработало:

-5

В интернетах пишут что версия должна быть не ниже 1.4.15, попробую обновить...

-6

И пробую снова запустить тот код, который выдал ошибку:

-7

Всё заработало, а про версию модуля SQLAlchemy я вычитал в чате курса:

-8

Придя на работу, на следующий день, я подумал - в первой лекции есть ссылка на документацию по SQLAlchemy, это ссылка на версию пакета 1.4.52:

-9

Так может есть смысл установить именно эту версию?! На рабочем компе как раз еще не устанавливался данный пакет. Установил, запустил скрипт из последней лекции, все работает, но выдает предупреждения о том что данный пакет устаревший:

-10

Вот и думаю, может всё же перейти на версию SQLAlchemy 2.0 и уже под эту версию делать домашнее задание?! Не думаю что там сильные изменения. Полистаю документацию и сделаю.

После pip install --upgrade sqlalchemy (произошло обновление до версии 2.0.29

-11

Возникла ошибка при запуске последнего скрипта, убрал одну строчку из Base и всё снова работает:

-12

Домашнее задание:

Опишите модели в декларативном стиле с помощью ORM. Пока мы не разобрались с зависимостями между таблицами с помощью ForeignKey, связи между таблицами определять не нужно. Author_id, book_id, student_id — обычные атрибуты соответствующих таблиц.
Определите hybrid_property для таблицы ‘receiving_books’ — count_date_with_book (количество дней, которые читатель держит/держал книгу у себя). Подумайте, как определять данный атрибут, если книгу до сих пор не сдали обратно в библиотеку.
Опишите classmethods для таблицы читателей:получить список студентов, которые имеют стипендию;
получить список студентов, у которых средний балл выше, чем тот балл, который будет передан входным параметром в функцию.
Создайте flask-приложение и опишите в нём роуты:получить все книги в библиотеке (GET);
получить список должников, которые держат книги у себя более 14 дней (GET);
выдать книгу студенту (POST — входные параметры ID книги и ID студента);
сдать книгу в библиотеку (POST — входные параметры ID книги и ID студента, если такой связки нет, выдать ошибку).
По желанию, повышенный уровень сложности. Создайте роут, с помощью которого можно найти книгу по названию. На вход передаётся строка, по которой будет выполнен поиск. Поиск должен выдавать книги, в названии которых содержится ключевая строка.

База данных должна состоять из 4х таблиц вот такого содержания:

Данную работу я сделал несколько больше чем требовалось. У меня получилась почти полноценно работающая информационная система для учета выдачи книг, которая работает в браузере:

Итак, начну с описания всех таблиц в декларативном стиле. Все они описаны в отдельном файле models.py. В галерее будет 4 страницы:

Далее реализуем все эндпойнты в отдельном файле routers.py:

Ну и остаются только html-файлы шаблонов, которые используются в render_template(). Опубликую лишь два файла - базовый и индекс:

-17
-18

Если кому нужны остальные файлы, их там не мало, пишите в комменты, какой файл интересует - скину.

-19

Самая сложная часть данной задачи была в понимании гибридного метода. Я кажется до сих пор не сильно понял зачем он нужен и нельзя ли было сделать как то проще подсчет просроченных дней?!

Ну а на этом у меня всё. Всем пока! Удачи, счастья, здоровья и любви! И денег побольше! Не забываем о "нравликах"!