Библиотека сайта 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
.
Рисунок 20.5: Базовые объекты пакета sqlalchemy.schema
Объект Table
представляет имя и другие атрибуты текущей таблицы, присутствующей в целевой схеме. Его коллекция объектов Column
представляет информацию об именах и типах для определенных столбцов таблицы. Заполненный массив объектов, описывающих ограничения, индексы и последовательности создается для предоставления большего объема информации о таблице, причем некоторые данные непосредственно влияют на принцип работы базы данных и системы формирования SQL-запросов. В частности, объект ForeignKeyConstraint
является ключевым при определении метода объединения двух таблиц.
Объекты Table
и Column
уникальны по сравнению со всеми остальными объектами из пакета для работы со схемами, так как они используют двойное наследование от объектов из пакетов sqlalchemy.schema
и sqlalchemy.sql.expression
, работая не только как конструкции уровня обработки схем, но также и как синтаксические единицы языка для создания выражений SQL. Это отношение проиллюстрировано на Рисунке 20.6.
Рисунок 20.6: Двойная жизнь объектов Table и Column
На Рисунке 20.6 мы можем видеть, что объекты Table
и Column
наследуются от объектов из мира SQL как специфические формы "вещей из которых вы можете выбрать", известных под именем FromClause
и "вещей, которые вы можете использовать в SQL-запросе", известных под именем ColumnElement
.
Продолжение статьи: SQL-запросы