Оригинал: Exercise 45: Creating an ORM
Переводчик: Феликс Волков
Лицензия: CC BY-NC-SA 4.0
Гордо использует Google Translate
Это последнее упражнение в разделе SQL этой книги представляет собой большой скачок. Вы использовали базу данных, чтобы узнать основы языка SQL. Также вы должны быть хорошо знакомы с ООП на Python. Теперь пришло время объединить эти два аспекта и создать объектно-реляционный менеджер (ORM). Задачей ORM является использование простых классов Python и преобразование их в строки, хранящиеся в таблицах базы данных. Если вы когда-либо работали с Django, то вы уже использовали их ORM для хранения данных. В этом упражнении вы попробуете воспроизвести, как это делается.
В реальном мире, если программист, работающий со мной, решил бы создать свой собственный ORM, я сказал бы ему: "Нет, используйте существующий." Обстановка работы отличается от образовательной среды, потому что кто-то платит вам за выполнение чего-то конкретного. Использование своего рабочего времени для создания чего-то, что не принесёт выгоду вашему работодателю, неправильно. Однако всё ваше личное время полностью принадлежит вам, и как новичок, вы должны пытаться воссоздать как можно больше классического программного обеспечения.Создание ORM позволит вам понять множество проблем, связанных с несоответствием концепций ООП и SQL. Есть много вещей, которые можно моделировать с помощью SQL, но классы часто оказываются запутанными. Еще одной проблемой является то, что всё в SQL — это таблицы. Попытка создания собственного ORM позволит вам глубже понять SQL и ООП, и я рекомендую потратить значительное количество времени, чтобы создать лучший ORM, какой только возможно.
Некоторыми ключевыми функциями, которые следует реализовать в вашем ORM, являются:
Передача строк извне в ORM должна быть безопасной. Если вы используете F-строки для создания своего SQL, то вы ошибаетесь. Причина заключается в том, что если вы выполняете f"SELECT * FROM {table_name}"
, кто-то может передать table_name
как SQL, например, person; DROP TABLE person
. Ваши данные могут быть повреждены таким образом, уничтожив все содержимое или даже хуже. Некоторые базы данных позволяют выполнять системные команды через SQL, это называется "инъекцией SQL", которую вы не должны внедрять в ваш ORM.+ Все операции CRUD, но реализованные на Python. Я рекомендую пропустить раздел CREATE TABLE
, пока вы не сделаете остальное корректно работоспособным. Простые операции INSERT
, SELECT
, UPDATE
и DELETE
легко реализуются, однако создание схемы базы данных из определения класса требует некоторых продвинутых приемов Python, чтобы сделать это действительно эффективным. Создайте свою базу данных с помощью вручную составленных .sql
файлов, а затем, когда остальные вещи будут работать правильно, попробуйте использовать систему схем для замены .sql
файлов.+ Соответствие типов Python и SQL типам, а также новым типам для работы со SQL типами. Вы можете обнаружить, что вам придётся делать некоторые хитрости, чтобы поместить Python данные в SQL таблицы. Возможно, это будет слишком болезненно, поэтому вы в конечном итоге создадите свои собственные типы данных. Именно так делает Django.
Транзакции являются продвинутой темой, но если вы сможете её реализовать, попробуйте. Я также скажу, что в этом упражнении вы можете взять идеи для функциональности из любого количества проектов. При проектировании не стесняйтесь изучать ORM Django. В конце концов, я настоятельно рекомендую вам сначала реализовать простой ORM, который может работать с небольшой базой данных, созданной вами в этой части книги. Как только вы добьётесь того, чтобы ваш ORM мог работать с этой базой данных, вы сможете расширить его до работы с любой другой.
Как было упомянуто в начале этой книги, книга Джо Целко ""Умники" SQL" покажет вам всё, что вам нужно знать о SQL. Книги Джо отличаются высоким качеством и помогут вам значительно превзойти этот короткий курс.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )