Что такое 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:
Возможность писать код Python вместо SQL может ускорить разработку веб-приложений, особенно в начале проекта. Потенциальное повышение скорости разработки связано с отсутствием необходимости переключаться с кода Python на написание операторов SQL с декларативной парадигмой.
ORM также теоретически позволяют переключать приложение между различными реляционными базами данных. Например, разработчик может использовать SQLite для локальной разработки и MySQL в производстве.
Однако на практике для локальной разработки лучше использовать ту же базу данных, что и в производстве. В противном случае в производственной среде могут возникнуть непредвиденные ошибки, которых не было в локальной среде разработки. Кроме того, проект редко переключается с одной производственной базы данных на другую, если только не было сереъезной причины.
Доступ к базе через Python ORM может осуществляться как в рамках соответствующих фреймворков Django, Flask, Tornado, так и на низком уровне с помощью библиотек коннекторов. Коннекторы могут пригодиться в том случае, когда скрипт предполагает обращение к базе данных, psycopg (для PostgreSQL) или MySQL-python (для MySQL).
Конечно же, подобные абстракции запросов SQL, сказываются на производительности, если речь идет о больших объемах данных, с чем хорошо справляется СУБД. При этом ORM хорошо справляется с запросами на небольшой части реляционной базы. Возможность же объектного представления запросов и данных реляционных баз решает задачу минимизации ошибок в программном коде.
Создано 03.11.2020 13:57:57
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
SQLAlchemy ORM¶
ORM ( англ. object-relational mapping, рус. объектно-реляционное отображение ) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». Существуют как проприетарные, так и свободные реализации этой технологии.
SQLAlchemy — это библиотека на языке Python для работы с реляционными СУБД с применением технологии ORM. Служит для синхронизации объектов Python и записей реляционной базы данных. SQLAlchemy позволяет описывать структуры баз данных и способы взаимодействия с ними на языке Python без использования SQL.
Диаграмма уровней SQLAlchemy
Преимущества использования¶
Использование SQLAlchemy для автоматической генерации SQL-кода имеет несколько преимуществ по сравнению с ручным написанием SQL:
- Безопасность. Параметры запросов экранируются, что делает атаки типа внедрение SQL-кода маловероятными.
- Производительность. Повышается вероятность повторного использования запроса к серверу базы данных, что может позволить ему в некоторых случаях применить повторно план выполнения запроса.
- Переносимость. SQLAlchemy, при должном подходе, позволяет писать код на Python, совместимый с несколькими back-end СУБД. Несмотря на стандартизацию языка SQL, между базами данных имеются различия в его реализации, абстрагироваться от которых и помогает SQLAlchemy.
Пример¶
Простейший пример с использованием SQLite в оперативной памяти:
1 2 3 4
>>> from sqlalchemy import create_engine >>> engine = create_engine('sqlite:///:memory:') >>> engine.execute("select 'Hello, World!'").scalar() u'Hello, World!'
Базовые понятия¶
- https://ru.wikibooks.org/wiki/SQLAlchemy
- https://bitbucket.org/zzzeek/pycon2013_student_package/
- Соединение (engine)
- create_engine
- execute
- fetchone
- fetchall
- close
- Транзакции
- Полный пример
- Table
- Имя таблицы
- Поля таблицы
- Первичные ключи
- SQL выражения
- Создание таблиц
- Огрничения и Индексы
- Внешние ключи
- Рефлексия
- Интроспекция
- Создание таблицы
- Простой пример выражений
- Функции OR и AND
- Операторы
- Операторы сравнения
- Операторы AND и OR
- Оператор сложения
- Операторы IN и NOT IN
- Диалекты
- Параметры
- Алиас (AS)
- Классическое представление классов таблиц
- Декларативное представление классов таблиц
- Схема таблицы
- MetaData
- Mapper
- Конструктор класса
- Ограничения и условия
- Выполнение SQL выражений
Применение и аналоги¶
SQLAlchemy находит применение в веб-фреймворках TurboGears, Pylons, Pyramid, Zope, Flask. Например, известный социальный новостной сайт Reddit построен с использованием SQLAlchemy. Список организаций, использующих SQLAlchemy, можно найти на сайте проекта.
Previous: Postgres Next: Соединение (engine)
© Copyright 2020, Кафедра Интеллектуальных Информационных Технологий ИнФО УрФУ. Created using Sphinx 1.7.6.
Блог
ORM — (Object Relative Mapping) — это паттерн проектирования, который позволяет наладить взаимосвязь между классом и таблицей в Базе Данных. ORM системы присутствуют в любом большом фреймворке — Laravel, ASP .Net, ORM Django и у многих других. Какие знания вам нужны, чтобы понять устройство ORM системы (и может быть, написать свою самостоятельно)? Во-первых, здесь не помешают знания объектно — ориентированного программирования, чтобы можно было создать класс с необходимыми полями и свойствами. Также, к каждой ORM системе необходимо разработать свою систему переноса полей (или свойств) класса внутрь таблиц большинства популярных баз данных — MySQL, PostgreSQL, и другие популярные реляционные БД. По сути каждому бекенд-программисту могут быть полезны глубокие знания по базам данных, например по сложным запросам, или по типам данных, которые работают в данной базе данных. ORM же позволяет программисту не вдаваться глубоко в структуру базы данных, а создать само описание таблицы в виде привычного и понятного класса, и затем сделать миграцию. Что такое миграция? Это процесс превращения класса в таблицу.
Это позволяет очень удобно распространять свой проект среди других программистов — они просто скачивают проект, доставляют необходимые библиотеки (в зависимости от языка и платформы) и запускают процесс миграции. После этого, они могут уже полноценно пользоваться ресурсом, регистрироваться, добавлять данные, и т.д. Кроме этого, если вдруг проект немного изменит свою структуру, нужно будет просто отредактировать класс, связанный с таблицей, и сделать рефреш, вместо достаточно продолжительных операций с базами данных. Давайте подведем итоги.
- — Изучите популярные базы данных и типы переменных;
- — Изучите подробно ООП на выбранном языке программирования
- — Изучите самостоятельно базы данных и виды связей между таблицами.
- — И изучите фреймворк, который популярен на рынке! Не забудьте вместе с ним изучить ORM систему, которая обычно используется совместно с ним.
Gradle — система сборки для Java, Kotlin и C++
Сегодня мы расскажем про систему сборки Gradle, которая широко используется, например, при сборке Java — приложений.
29 апреля 2021
Golang — востребованность и сферы применения
Сегодня мы решили рассказать, что из себя представляет язык программирования Golang — зачем он нужен, и как его можно использовать. Он был придуман в корпорации Google для того, чтобы разрабатывать быстрые и надежные бекенд – приложения (однако создан для того, чтобы писать, а не читать).
24 апреля 2021
Gihub Cli — классная надстройка на обычным Git
Всем привет! Сегодня мы решили рассказать вам про классную надстройку над стандартной Git, которую умеренно рекламирует Gihub – Github-CLI. Поговорим о том, какие у нее возможности, и кому она может быть интересна.
Сравниваем две популярные ORM на Python
Две самые популярные ORM на Python – это SQLAlchemy и Django ORM. Давайте взглянем на их основные различия.
Разные подходы к отображению
Django ORM использует паттерн active record, а SQLAlchemy – data mapper. Если коротко, то разница между этими подходами заключается в том, что active record подразумевает, что каждая строка в базе данных будет обёрнута в отдельный python-объект. А подход data mapper позволяет управлять этим отображением.
В целом ни один из этих подходов не хуже. У каждого есть свои сильные и слабые стороны. Например, подход active record проще для понимания и популярнее, а data mapper даёт больше возможностей.
Разная гибкость
Django ORM – часть фреймворка Django, которая позволяет очень просто делать определённое подмножество всех сайтов. Django ORM обладает теми же свойствами: более-менее типичные запросы на ней можно сделать очень легко. А вот со сложными запросами Django ORM не справится.
SQLAlchemy наоборот: позволяет создавать очень сложные запросы, но в среднем формирование запроса будет сложнее.
Чаще всего именно это приводит к необходимости использовать SQLAlchemy в проектах на Django: в некоторых местах нужно сделать особо сложные запросы, с которыми не справится Django ORM, поэтому именно в этих местах используют SQLAlchemy.
Размер сообщества
Django ORM нельзя использовать отдельно от Django, поэтому и сообщество ограничено пользователями Django.
С SQLAlchemy всё иначе: она не привязана к фреймворку и позволяет строить очень сложные запросы, что делает её очень популярной. На сегодняшний день сообщество SQLAlchemy – самое большое среди сообществ других ORM на Python.
Вместо вывода
Как видите, даже основные различия показывают, что Django ORM и SQLAlchemy – это два разных инструмента для разных целей, и противоборства между ними нет.
Есть вопрос? Напишите в комментариях!