Популярные web приложения постоянно получают и отправляют множество новых данных, автоматически внося их в свою базу, при этом составление самих запросов лежит на плечах программиста. Реальное веб приложение потребует написания множества запросов на языке SQL . Для более лаконичного их представления и используются -...

Что такое ORM в Python

Популярные web приложения постоянно получают и отправляют множество новых данных, автоматически внося их в свою базу, при этом составление самих запросов лежит на плечах программиста. Реальное веб приложение потребует написания множества запросов на языке SQL. Для более лаконичного их представления и используются - Объектно-реляционные преобразователи или ORM. О преимуществах и недостатках, которых мы поговорим в данной статье.

Объектно-реляционный преобразователь (ORM) - это библиотека кода, которая автоматизирует перенос данных, хранящихся в таблицах реляционной базы данных, в объекты,которые используются в коде приложения.

Чем полезны ORM? ORM предоставляют высокоуровневую абстракцию реляционной базы данных, которая позволяет разработчику писать код Python вместо SQL для создания, чтения, обновления и удаления данных и схем в своей базе данных. Разработчики могут использовать язык программирования, который им удобен, для работы с базой данных вместо написания операторов SQL или хранимых процедур.

Например, без ORM разработчик написал бы следующий оператор SQL для получения каждой строки в таблице USERS, где столбец zip_code равен 94107:


SELECT * FROM USERS WHERE zip_code=94107;

#Вместо этого эквивалентный запрос ORM Django будет выглядеть как следующий код Python:

users = Users.objects.filter(zip_code=94107)

Возможность писать код Python вместо SQL может ускорить разработку веб-приложений, особенно в начале проекта. Потенциальное повышение скорости разработки связано с отсутствием необходимости переключаться с кода Python на написание операторов SQL с декларативной парадигмой.

ORM также теоретически позволяют переключать приложение между различными реляционными базами данных. Например, разработчик может использовать SQLite для локальной разработки и MySQL в производстве.

Однако на практике для локальной разработки лучше использовать ту же базу данных, что и в производстве. В противном случае в производственной среде могут возникнуть непредвиденные ошибки, которых не было в локальной среде разработки. Кроме того, проект редко переключается с одной производственной базы данных на другую, если только не было сереъезной причины.

Доступ к базе через Python ORM может осуществляться как в рамках соответствующих фреймворков Django, Flask, Tornado, так и на низком уровне с помощью библиотек коннекторов. Коннекторы могут пригодиться в том случае, когда скрипт предполагает обращение к базе данных, psycopg (для PostgreSQL) или MySQL-python (для MySQL).

Конечно же, подобные абстракции запросов SQL, сказываются на производительности, если речь идет о больших объемах данных, с чем хорошо справляется СУБД. При этом ORM хорошо справляется с запросами на небольшой части реляционной базы. Возможность же объектного представления запросов и данных реляционных баз решает задачу минимизации ошибок в программном коде.