Рубрики
Без рубрики

ORM и SQLALCHEMY – «Волшебная палочка» в управлении базами данных

Вы являетесь разрабатывателем BackeNG, необходимые с громоздкими базами данных на ежедневной основе? Вы оказываетесь … Теги с Python, SQLALCHEMY, ORM, базой данных.

Вы являетесь разрабатывателем BackeNG, необходимые с громоздкими базами данных на ежедневной основе? Вы оказываетесь настроен на написание длинными и сложными SQL-запросами каждый раз, когда вы работаете с ванными базами данных? Чтобы решить эти проблемы и неудобства при работе с базами данных, ORM была создана. В этой статье давайте узнаем, что ORM есть и как использовать SQLALCHEMY, ORM для Python и посмотреть, как это сделало бы вашу жизнь как разработчик Backenc намного проще!

Примечание. Поскольку эта статья посвящена только системам управления реляционными базами данных (RDMSS), E.G MySQL, PostgreSQL, SQLite, …, в объеме этой темы фраза «Базы данных» будут связаны только с реляционными базами данных.

Давным-давно, когда человечество еще не узнает о том, что называется «ORM», каждый раз, когда разрабатыватели хотели взаимодействовать с базами данных (создавать, чтение, обновлять и удалять данные в таблицах), им пришлось писать необработанные SQL-запросы и выполнили их В программе с использованием разъемов. Представьте, что у вас есть таблица, называемая лицом с двумя столбцами и возрастом в вашей базе данных, к которой вы хотите добавить новую запись, вам придется делать следующим образом (все примеры в этой статье используют Python в качестве языка программирования):

cursor = db.cursor()
sql = 'INSERT INTO Person(name, age) VALUES ("Alice", 21)'
cursor.execute(sql)
db.commit()

Как продемонстрировано выше, вам придется писать RAW SQL-запросы в качестве строк, затем используют разъем для их выполнения. Это в некоторых случаях неудобных и склонных к ошибкам, поскольку RAW SQL-запросы часто длинные, трудно изменить, а не оптимально. Например, каждый раз, когда вам нужно создать изменения в схеме базы данных, без использования ORM вам придется получить доступ к серверу базы данных и выполнить изменения в SQL-запросы. В этом нет ничего плохого в этом, но его можно раздражать, так как вы часто должны сдвигаться между 2 средами, кодом приложения и сервером баз данных. Между тем, используя ORM, мы можем внести изменения в схему базы данных, затем выполняют миграцию прямо внутри кода приложения, избегая бремени необходимости перемещаться между кодом и базами данных (это будет сделано более четкой во второй части этой статьи с примерами с использованием SQLALCHEMY Красивая модная обр).

Следовательно, ORM был создан для того, чтобы служить перспективным подходом к лучшему и более эффективному управлению базой данных.

1.1. Что такое ORM?

Вы положили свое чрезмерное использование фразы «ORM» до сих пор в этой статье, так что именно именно это? ORM – это аббревиатура для реляционного отображения объекта. Чтобы просто поставить его, ORM – это методика программирования для представления записей базы данных в качестве соответствующих объектов в языках программирования. Следовательно, мы могли бы взаимодействовать и выполнять операции на этих записях базы данных, как если бы мы имели дело с объектами. ORM дает нам силу «волшебной палочки», чтобы превратить записи базы данных на объекты, изготовление взаимодействий базы данных и модификации как легких, как объекты обработки в языках программирования.

В приведенном выше примере запись данных с ID 1 представлена как объект человека с тремя свойствами: first_name (Джон), last_name (Коннор) и Phone_number (+16105551234).

1.2. Какие типы ORM есть?

Существует два шаблона дизайна ORM, которые широко известны и используются: Активная запись и Данные Mapper Отказ

Активная запись

Активная запись – это шаблон дизайна ORM, в которой каждая таблица в базе данных обернута внутри модели. Следовательно, каждый объект этой модели будет плотно прикреплен к записи базы данных. С Active Record, в модели пользователи не должны указывать свойства моделей или соединения этих свойств к базе данных, поскольку созданные объекты будут выяснять это, глядя на схему базы данных. Кроме того, Active Record STRMS обычно имеет встроенный CRUD (CREATE – READ – UPDATE – DELETE) Методы, такие как Сохранить () , Создать () … Поддержка манипуляций объекта.

Популярные ORMS с активными рекордными узорами включают Ruby на рельсах, ОрМ Джанго и Yii.

Вернуться к примеру с Персональный стол в том числе три колонны first_name , last_name , и Phone_number Выше при использовании Django’s Orm, ORM с активным рисунком записи, декларация модели выполняется следующим образом:

from django.db import models

class Person(models.Model):
   first_name = models.CharField()
   last_name = models.CharField()
   phone_number = models.CharField()

С Active Record Pattern, модели должны соблюдать структуры их соответствующих таблиц. Например, модель Человек Выше должно быть ровно 3 столбца first_name , last_name и Phone_number как в Человек Таблица.

Mapper данных

Отличается от активной картины записи, в данных Mapber Capper, вместо непосредственного подключения каждого объекта к соответствующей записи базы данных, ORM будет служить слоем, отвечающим за разделение и передачу данных двунаправленными между базой данных и код приложения. Это означает, что объекты приложений не имеют знаний или информации о схеме базы данных. Созданные объекты не будут представления о существовании базы данных и наоборот.

Популярные ORMS с Data Mapper Records включают доктрину, гибернацию и SQLALCHEMY.

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

Для вышеуказанного Человек Пример, модельная декларация с SQLALCHEMY, Data Mapper ORM, выполняется следующим образом:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class Person(Base):
   __tablename__ = 'Person'

   id = Column(Integer, primary_key=True)
   first_name = Column(String)
   last_name = Column(String)
   address = Column(String)

Как видите, с Data Mapper Corms Models может иметь более или меньше столбцов, чем схема таблицы, в этом случае отсутствуют в столбце Phone_Number и добавление адреса столбца.

1.3. Каковы плюсы и минусы ORM?

Плюс

  • Красительность. ORM позволяет пользователям использовать языки программирования их выбора с более лаконичным и простым синтаксисом, чем использование RAW SQL-запросов, уменьшая объем необходимого кода.
  • Оптимальный. ORM также позволяет пользователям принимать преимущества оптимизации ориентированного объекта, ориентированного на объект, такие как наследование, инкапсуляция и абстракция, представление записей базы данных в качестве объектов.
  • Гибкость С ORM пользователи могут легко переключаться между различными системами управления базами данных (MySQL, SQLite3, PostgreSQL, …) без необходимости обладать звуковым пониманием этих систем, а также языком SQL.

Господин

  • Время. Поскольку ORMS – это фреймворки, пользователи должны будут проводить время обучения и ознакомиться с этими инструментами.
  • Меньше контроля. Использование ORM пользователи будут меньше контроля и инициативы с базами данных. Во второй части этой статьи мы узнаем, как использовать SQLALCHEMY, довольно известную ORM для языка программирования Python, и посмотреть, как этот инструмент может помочь вам сэкономить значительное количество времени и усилий при работе с базой данных.

2.1. Что такое SQLALCHEMY?

SQLALCHEMY – это инструментарий Python SQL и ORM поддерживая манипулирование и управление базой данных. SQLalchemy предоставляет пользователям ORM, используя шаблон дизайна Mapper данных. Сначала ввел в 2006 году, SQLalchemy быстро приобрел популярность в сообществе Python и впоследствии был принят в больших технологиях, таких как Yelp!, Reddit, Dropbox, …

2.2. Что может сделать SQLALCHEMY?

Подключиться к базам данных

from sqlalchemy import create_engine

engine = create_engine('sqlite:///:memory:')

Вы можете поместить в адрес базы данных в качестве параметра. В этом случае я использую SQLite в памяти, но SQLalchemy совместим со многими другими системами управления базами данных, включая MySQL и PostgreSQL.

Объявить картографирование и создавать схемы

Традиционная процедура ORM включает в себя 2 шага: описать базу данных и объявить, какой класс соответствует какую таблицу. К счастью, SQLALCHEMY сочетает в себе эти 2 ступени в 1 с использованием декларативной базы.

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class Employee(Base):
   __tablename__ = 'employees'
   id = Column(Integer, primary_key=True)
   name = Column(String)
   age = Column(Integer)

Запрос

Перед запросом и модификацией нашей базы данных мы должны подключиться к базе данных на сеансе.

from sqlalchemy.orm import sessionmaker

Session = sessionmaker()
Session.configure(bind=engine)
session = Session()

Представьте, что мы хотим найти всех сотрудников по имени Алиса, мы можем получить результат просто следующим образом:

res = session.query(Employee).filter_by(name='Alice').all()

Хорошо, но если у нас будет слишком много алейсов, мы могли бы ограничить количество записей, которые мы хотим получить:

res = session.query(Employee).filter_by(name='Alice')
                            .order_by(Employee.id)
                            .limit(5)
                            .all()

Вставить и обновлять

Мы можем легко вставить и обновлять одну или множество записей базы данных, взаимодействуя с экземплярами сотрудника класса. Предположим, что мы хотим добавить работника, названного Боб и Боб, 21 год, вот как мы можем сделать это с SQLALCHEMY:

bob = Employee(name='Bob', age=21)
session.add(bob)
session.commit()

Не забудьте совершить после изменения записей. Но кажется ошибкой. Боб на самом деле 22, так как мы могли бы обновить свой возраст в базе данных?

bob = session.query(Employee).filter_by(name='Bob').first()
bob.age = 22
session.commit()

Откат

Мы все иногда делаем ошибки, поэтому SQLalchemy имеет механизм для пользователей, чтобы откат, когда что-то пойдет не так. Предположим, мы добавили сотрудника по ошибке:

mistake = Employee(name='mistake', age=0)
session.add(mistake)

С SQLALCHEMY, мы могли бы отказаться от предыдущей транзакции следующим образом:

session.rollback()

Не так уж плохо, верно?

2.3. Почему мы должны использовать SQLALCHEMY?

В дополнение к наследству удивительных особенностей ORM, как указано выше, SQLalchemy предоставляет пользователям ряд других полезных функций.

2.3.1. Модификация схемы

Вы когда-нибудь поняли, что вы должны изменить свою схему базы данных в середине дороги? Без ORM вы должны выполнить изменения в сервере базы данных по крайней мере за таблицу. SQLalachmy помогает вам синхронизировать модели и схемы, чтобы вам приходилось работать только внутри прикладной среды. Используя дополнение алемического дополнения SQLALCHEMY, вы можете изменить схему в среде кода, затем запустите следующую команду терминала:

$ alembic upgrade head

И кабу! Ваша схема и модель были синхронизированы. Так просто!

2.3.2. Полезный инструмент в фазе тестирования

С каждым продуктом тестирование является абсолютно важной фазой. При тестировании приложений, использующих базы данных, тестеры должны открывать соединение до и закрыть соединение после взаимодействия с базами данных. Эти шаги вызывают дублирование кода и подвержены неисправности, особенно когда тестеры забывают закрыть соединение.

Чтобы решить эту проблему, SQLALCHEMY CORE поставляется с функцией Connect, которая используется вместе с двигателем, который помогает вам поддерживать и управлять соединением базы данных. Точное использование соединения гарантирует, что в процессе тестирования есть одно и только одно соединение.

2.3.3. Стол отношения организации

Еще одна замечательная вещь о SQLALCHEMY – насколько удобно и ясно это делает табличные отношения. Это позволяет пользователям явно указывать эти отношения в коде, используя лучшие практики ориентированного на объект программирования. SQLalchemy имеет вариант под названием Lazy Loading, который позволяет пользователям указывать, как они хотят получить записи для базы данных. Пользователи могут выбрать данные из таблицы ( Lazy ), данные из соединенных таблиц ( Lazy ), или объекты для продолжения запроса позже ( ленивый ).

2.3.4. Подробная и четкая документация

Я не могу вам достаточно сказать, насколько важная документация в инструменте является ваша производительность работы. Прежде чем решить, следует ли использовать библиотеку/инструмент в вашем приложении, есть несколько вопросов для ответа:

  • Легко и быстро учиться?
  • Сообщество этой библиотеки большой и поддерживающей?
  • Документация библиотеки подробно и понятна?

Для SQLALCHEMY, к счастью, ответы на все три вопроса выше – «да». Документация SQLALCHEMYS очень подробно и последовательна. Даже если вы новичок в Python, в документации есть примеры, которые помогут вам пошаговать, чтобы ознакомиться с библиотекой и получить возможность использовать самые передовые функции.

На Stackoverflow есть, на момент написания, 16 000 вопросов с помощью метка SQLALCHEMY. Следовательно, вы не должны беспокоиться о неразрешимых ошибках при использовании этого инструмента.

Я надеюсь, что эта статья поможет вам получить лучшее чувство ORM, SQLALCHEMY, и почему эти вещи быстро набирают популярность. Счастливое кодирование!

Давайте свяжемся: Персональный сайт LinkedIn Email Гадость

Оригинал: “https://dev.to/billtrn/orm-and-sqlalchemy-the-magic-wand-in-database-management-13fb”