Сериализованные объекты DBM

serializovannye obekty dbm Базы данных и постоянное хранение

Вероятно, наибольшим ограничением файлов DBM является тип хранимых в них данных: данные, записываемые под ключом, должны быть простой текстовой строкой. При необходимости сохранять в файле DBM объекты Python иногда можно вручную преобразовывать их в строки и обратно при записи и чтении (например, с помощью функций str и eval), но это полностью не решает проблемы. Для объектов Python произвольной сложности, таких как экземпляры классов, требуется нечто другое. Объекты экземпляров классов, к примеру, обычно нельзя впоследствии воссоздать из стандартного строкового представления. Кроме того, при реализации собственных методов преобразования в строку и воссоздания объекта из строки легко допустить ошибку, и такие инструменты не являются универсальным решением.

Модуль Python pickle, входящий в стандартную поставку системы Python, обеспечивает требуемое преобразование. Это своего рода универсальный инструмент, осуществляющий прямое и обратное преобразование, — модуль pickle может преобразовывать практически любые объекты Python, находящиеся в памяти, в формат одной линейной строки, пригодной для хранения в плоских файлах, пересылки через сокеты по сети и так далее. Это преобразование объекта в строку часто называют преобразованием в последовательную форму, или сериа ли за ци ей — произвольные структуры данных, размещенные в памяти, отображаются в последовательный строковый формат.

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

В результате при воссоздании объекта фактически создается его копия — говоря на языке Python, соблюдается условие ==, но не is. Поскольку воссоздание объектов происходит, как правило, в совершенно новом процессе, это отличие обычно не имеет большого значения (хотя, как мы видели в главе 5, именно это обстоятельство обычно препятствует использованию сериализованных объектов для непосредственной передачи информации о состоянии между процессами).

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

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

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

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