Интерфейсы баз данных SQL

interfejsy baz dannyh sql Базы данных и постоянное хранение

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

Тем не менее ни shelve, ни ZODB не являются полновесными системами баз данных — доступ к объектам (записям) происходит по единственному ключу и нет понятия запросов SQL. Хранилища, создаваемые модулем shelve, по сути представляют собой как бы базу данных с единственным индексом и отсутствием поддержки обработки других запросов. В принципе можно построить интерфейс с множественными индексами, чтобы хранить данные в нескольких хранилищах shelve, но это нетривиальная задача, требующая написания расширений вручную.

ZODB поддерживает некоторые виды поиска, не поддерживаемые модулем shelve (например, возможность каталогизации), а обход хранимых объектов может выполняться с использованием всей мощи языка Python. Однако ни shelve, ни объектно-ориентированная база данных ZODB не предоставляют обобщенность запросов SQL. Кроме того, иногда, особенно для хранения данных, имеющих табличную организацию, реляционные базы данных подходят гораздо лучше.

Для программ, которые могут получить дополнительные преимущества от использования SQL, в языке Python имеется поддержка систем управления реляционными базами данных (СУРБД). Реляционные базы данных не исключают использование инструментов сохранения объектов, изучавшихся выше в этой главе, — например, в реляционной базе данных можно сохранять строки, представляющие сериализованные объекты Python, созданные с помощью модуля pickle. ZODB также поддерживает возможность отображения объектной базы данных в реляционное хранилище.

Однако базы данных, с которыми мы познакомимся в этом разделе, имеют иную организацию и обрабатываются совершенно иными способами:

     Они хранят данные в реляционных таблицах, состоящих из столбцов (а не в словарях с объектами Python, имеющими произвольную структуру).

     Для доступа к данным и использования отношений между ними они поддерживают язык запросов SQL (вместо простого обхода объектов Python).

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

В настоящее время имеются свободно распространяемые интерфейсы, позволяющие сценариям Python использовать не только свободные, но и коммерческие системы реляционных баз данных: MySQL, Oracle, Sybase, Informix, InterBase, PostgreSQL (Postgres), SQLite, ODBC и другие. Кроме того, сообщество Python определило спецификацию API баз дан ных, переносимым образом работающего с рядом пакетов баз данных. Сценарии, написанные для этого API, могут переходить на пакеты баз данных других поставщиков с минимальными изменениями в исходном программном коде или вообще без них.

Начиная с версии Python 2.5, в стандартную библиотеку Python была включена встроенная поддержка системы реляционных баз данных SQLite. Поскольку эта система поддерживает переносимый API баз данных, она может служить инструментом и для организации хранения данных, и для разработки прототипов — системы, разрабатываемые с использованием SQLite, будут работать практически без изменений с более полноценными базами данных, такими как MySQL или Oracle.

Кроме того, имеются такие популярные сторонние системы, как SQL- Object и SQLAlchemy, реализующие механизмы объектно-реляционного отображения (Object Relational Mapper, ORM), которые добавляют объектный интерфейс к реляционным базам данных. Они моделируют таблицы на основе классов Python, где строки представляют экземпляры этих классов, а столбцы — атрибуты экземпляров. Поскольку механизмы ORM просто обертывают базы данных SQL в классы Python, мы обсудим их позднее в этой главе, а сейчас рассмотрим основы поддержки SQL в языке Python.

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

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

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