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

UnixForum





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

SQLAlchemy

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

Оригинал: SQLAlchemy
Автор: Michael Bayer
Дата публикации: 3 Мая 2012 г.
Перевод: А. Панин
Дата перевода: 23 Октября 2013 г.

SQLAlchemy является тулкитом для работы с базами данных, а также системой объектно-релиционного отображения (ORM) для языка программирования Python, впервые представленной общественности в 2005 году. С самого начала реализация данного программного продукта осуществлялась с целью предоставления законченной системы для работы с реляционными базами данных в Python, которая будет основываться на API для работы с базами данных языка Python (DBAPI). Даже возможности ранних релизов SQLAlchemy привлекли широкое внимание общественности. Среди ключевых возможностей системы следует выделить большую скорость работы с сложными SQL-запросами и отображениями объектов, а также реализацию шаблона проектирования "рабочей единицы" ("unit of work"), которая позволяет создать хорошо автоматизированную систему для сохранения информации в базе данных.

Начав свое развитие с небольшой по объему ограниченной реализации концепции, система SQLAlchemy быстро продолжила развиваться, проходя множество этапов преобразований и переработок, переходя к использования все новых внутренних архитектурных решений и публичных API по мере продолжающегося роста пользовательской базы. Ко времени выпуска версии 0.5 в январе 2009 года код системы SQLAlchemy начал стабилизироваться и широко внедряться. По мере выпуска версий 0.6 (в апреле 2010 года) и 0.7 (в мае 2011 года) было продолжено внесение улучшений в области архитектуры и API для реализации настолько производительной и стабильной библиотеки, насколько это возможно. На момент написания этой главы SQLAlchemy используется в большом количестве организаций в различных областях применения и считается многими стандартом де-факто системы для работы с реляционными базами данных при использовании языка программирования Python.

20.1. Сложность создания слоя абстракции для баз данных

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

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

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

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

Подход к созданию слоя абстракции для баз данных, используемый в рамках SQLAlchemy

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

В то же время, реализация этих решений может и должна быть произведена в соответствии с высокоуровневыми шаблонами проектирования настолько, насколько это возможно. Установление связи модели объектов со схемой и реализация этой связи с помощью запросов является скучным занятием. Использование инструментов для автоматизации этих задач позволяет сделать процесс разработки приложения более коротким, понятным и эффективным, а также позволяет завершить его в течение того же промежутка времени, который мог потребоваться для разработки позволяющего выполнить эту задачу кода вручную.

В этом случае SQLAlchemy рассматривается как тулкит, который позволяет повысить значение роли разработчика с пассивного пользователя решений, предлагаемых библиотекой, до архитектора/создателя реляционных структур и связей между этими структурами и приложением. Раскрывая реляционные концепции, SQLAlchemy использует идею "неполной абстракции", принуждая разработчика к созданию специального и в то же время полностью автоматизированного уровня взаимодействия между приложением и реляционной базой данных. Инновация SQLAlchemy заключается в степени, до которой эта система позволяет осуществлять автоматизацию, причем данная автоматизация не снижает степень контроля разработчика над реляционной базой данных.


Продолжение статьи: Дихотомия между основными задачами и объектно-реляционным отображением