Orm python что это
Перейти к содержимому

Orm python что это

  • автор:

Что такое ORM в Python

Что такое 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.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    SQLAlchemy ORM¶

    ORM ( англ. object-relational mapping, рус. объектно-реляционное отображение ) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». Существуют как проприетарные, так и свободные реализации этой технологии.

    SQLAlchemy — это библиотека на языке Python для работы с реляционными СУБД с применением технологии ORM. Служит для синхронизации объектов Python и записей реляционной базы данных. SQLAlchemy позволяет описывать структуры баз данных и способы взаимодействия с ними на языке Python без использования SQL.

    ../../../../_images/sqlalchemy_layers_ru.png

    Диаграмма уровней 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

            WebDev_Deep_LAST_25.07_3_Site.png

            Две самые популярные ORM на Python – это SQLAlchemy и Django ORM. Давайте взглянем на их основные различия.

            Разные подходы к отображению

            Django ORM использует паттерн active record, а SQLAlchemydata 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 – это два разных инструмента для разных целей, и противоборства между ними нет.

            Есть вопрос? Напишите в комментариях!

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *