Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

SQLAlchemy

Глава 20 из книги "Архитектура приложений с открытым исходным кодом", том 2.

Оригинал: SQLAlchemy
Автор: Michael Bayer
Перевод: А. Панин

20.4. Описание схемы

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

Объектно-реляционное отображение или уровень доступа к данным должен предоставлять программный доступ к возможностям языка SQL; в их основе лежит программная система описания таблиц и столбцов. Это именно то место, где в рамках SQLAlchemy происходит первое жесткое разделение на основную систему и объектно-реляционное отображение путем реализации конструкций Table и Column, которые описывают структуру базы данных независимо от пользовательского описания класса модели. Обоснованием разделения описания схемы и объектно-реляционного отображения является тот факт, что реляционная схема может быть спроектирована исключительно с использованием терминологии реляционных баз данных, включая платформо-специфичные особенности в случае необходимости без осложнения этого процесса путем введения в него объектно-реляционных концепций - они будут использоваться отдельно. Независимость от компонента объектно-реляционного отображения также подразумевает то, что существующая система описания схем становится настолько же функциональной, как и любая другая объектно-реляционная система, которая могла бы быть реализована на базе основной системы.

Объекты моделей Table и Column реализуются в области так называемых метаданных (metadata), в которой объект коллекции с именем MetaData представляет коллекцию объектов Table. Структура объектов по большей части реализована в соответствии с описанием "отображения метаданных" ("Metadata Mapping") из книги Martin Flower под названием "Patterns of Enterprise Application Architecture". Рисунок 20.5 иллюстрирует некоторые ключевые элементы пакета sqlalchemy.schema.

Базовые объекты пакета sqlalchemy.schema
Рисунок 20.5: Базовые объекты пакета sqlalchemy.schema

Объект Table представляет имя и другие атрибуты текущей таблицы, присутствующей в целевой схеме. Его коллекция объектов Column представляет информацию об именах и типах для определенных столбцов таблицы. Заполненный массив объектов, описывающих ограничения, индексы и последовательности создается для предоставления большего объема информации о таблице, причем некоторые данные непосредственно влияют на принцип работы базы данных и системы формирования SQL-запросов. В частности, объект ForeignKeyConstraint является ключевым при определении метода объединения двух таблиц.

Объекты Table и Column уникальны по сравнению со всеми остальными объектами из пакета для работы со схемами, так как они используют двойное наследование от объектов из пакетов sqlalchemy.schema и sqlalchemy.sql.expression, работая не только как конструкции уровня обработки схем, но также и как синтаксические единицы языка для создания выражений SQL. Это отношение проиллюстрировано на Рисунке 20.6.

Двойная жизнь объектов Table и Column
Рисунок 20.6: Двойная жизнь объектов Table и Column

На Рисунке 20.6 мы можем видеть, что объекты Table и Column наследуются от объектов из мира SQL как специфические формы "вещей из которых вы можете выбрать", известных под именем FromClause и "вещей, которые вы можете использовать в SQL-запросе", известных под именем ColumnElement.


Продолжение статьи: SQL-запросы