ORM: механизмы объектно-реляционного отображения

orm mehanizmy obektno relyacionnogo otobrazheniya Базы данных и постоянное хранение

В этой главе мы познакомились с объектно-ориентированными базами данных, которые позволяют хранить объекты Python, а также с базами данных SQL, хранящими данные в таблицах. Как оказывается, существует еще один класс систем, которые служат мостом между мирами объектов и таблиц, и которые я упоминал ранее в этой главе: механизмы ORM позволяют подружить модель классов Python с таблицами в реляционных базах данных. Они объединяют мощь систем реляционных баз данных с простотой объектно-ориентированного синтаксиса Python; они позволяют использовать базы данных SQL и сохранять в них данные, которые в сценариях выглядят как объекты Python.

В настоящее время среди открытых систем сторонних разработчиков имеются два лидера, реализующих такое отображение: SQLObject и SQL- Alchemy. Обе являются слишком сложными системами, чтобы их можно было достаточно полно рассмотреть в этой книге, поэтому ищите соответствующую документацию в Интернете для получения более полного представления о них (в настоящее время имеются даже книги, специально посвященные SQLAlchemy). Кроме того, к моменту написания этих слов ни одна из них еще не была полностью готова для использования в Python 3.X, поэтому я не могу в этой книге привести примеры работы с ними.

Однако, чтобы дать вам некоторое представление о модели ORM, ниже кратко рассказывается о том, как можно использовать систему SQLOb- ject для создания и обработки записей в базе данных. В двух словах, SQLObject отображает:

     Классы Python в таблицы базы данных.

     Экземпляры классов Python в записи внутри таблиц.

     Атрибуты экземпляров в столбцы записей.

Например, чтобы создать таблицу, необходимо определить класс, атрибуты которого будут определять столбцы, и вызвать метод создания (следующий фрагмент взят из более полного примера, который приводится на веб-сайте SQLObject):

from sqlobject import *

sqlhub.processConnection = connectionForURI(‘sqlite:/:memory:’)

class Person(SQLObject): # класс: описывает таблицу

first = StringCol() # атрибуты класса: описывают столбцы

mid = StringCol(length=1, default=None) last = StringCol()

Person.createTable() # создать таблицу в базе данных

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

p = Person(first=’Bob’, last=’Smith’) # новый экземпляр: создает

# новую запись

p # выведет все атрибуты по именам

p.first # атрибуты: извлечет значение столбца

p.mid = M # атрибуты: обновит запись

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

p2 = Person.get(1) # извлечь существующую запись/экземпляр: p2 это p

p.set(first=’Tom‘, last=’Jones‘) # изменить 2 атрибута/поля в одной операции

Кроме того, имеется возможность выбирать записи по значениям столбцов, создав объект запроса и выполнив его:

ts = Person.select(Person.q.first==’Tom’) # запрос: выборка

# по значению столб.

list(ts) # выполнить запрос: список экземпл.

tjs = Person.selectBy(first=’Tom’, last=’Jones’) # альтернативная форма

# запроса (по И)

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

Порядок использования ORM SQLAlchemy, конечно же, существенно отличается, но его функциональные возможности и получаемый конечный результат аналогичны. За дополнительной информацией о механизмах ORM для Python обращайтесь через свои поисковые системы к Интернету. Вы можете также поближе познакомиться с такими системами и их задачами в некоторых крупных веб-фреймворках. Например, в состав Django входит механизм ORM, являющийся вариацией на эту тему.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий