Persistencia e intercambio de datos¶
La persistencia de datos para el uso a largo plazo tiene dos aspectos: la conversión de los datos entre el objeto en la memoria y el formato de almacenamiento, y trabajar con el almacenamiento de los datos convertidos. La biblioteca estándar incluye una variedad de módulos que manejan ambos aspectos en diferentes situaciones.
Dos módulos convierten objetos en un formato que puede ser transmitido o
almacenado (un proceso conocido como serialización). Es más común usar
pickle
para persistencia, ya que está integrado con algunos módulos de
biblioteca estándar que almacenan datos serializado, como shelve
. Sin
embargo, json
se usa con más frecuencia para aplicaciones Web, ya que se
integra mejor con herramientas existentes de almacenamiento de servicios web.
Una vez que el objeto en memoria se convierte a un formato que se puede guardar, el siguiente paso es decidir cómo almacenar los datos. Un simple archivo plano con objetos serializados escritos uno después del otro funciona para datos que no necesita ser indexados de ninguna manera. Python incluye una colección de módulos para almacenar pares clave-valor en una base de datos simple utilizando una de las variantes de formato de DBM cuando se necesita una búsqueda indexada.
La forma más directa de aprovechar el formato de DBM es shelve
. Abre el
archivo shelve y accede a él a través de una interfaz tipo diccionario. Los
objetos guardados en la base de datos son conservados automáticamente y
guardados sin ningún trabajo adicional por la persona que ejecuta.
Una desventaja de shelve
es, sin embargo, que cuando se utiliza el valor
interfaz por defecto no hay manera de predecir qué formato DBM se utilizará, ya
que selecciona uno basado en las bibliotecas disponibles en el sistema donde se
crea la base de datos. El formato no importa si la aplicación no necesitará
compartir los archivos de la base de datos entre hosts con diferentes
bibliotecas, pero si la portabilidad es un requisito, usa una de las clases en
el módulo para asegurar que se seleccione un formato específico.
Para aplicaciones web que ya trabajan con datos en JSON, utilizar json
y
dbm
proporciona otro mecanismo de persistencia. Usar dbm
directamente es un poco más de trabajo que shelve
porque las claves y los
valores de la base de datos deben ser cadenas, y los objetos no se volverán a
crear automáticamente cuando el valor sea accedido en la base de datos.
La base de datos relacional sqlite3
está disponible con la mayoría de
las distribuciones de Python para almacenar datos en arreglos más complejo sque
los pares clave/valor. Almacena su base de datos en la memoria o en un archivo
local, y todo el acceso es desde dentro del mismo proceso por lo que no hay
retraso de comunicación de red. La naturaleza compacta de sqlite3
lo hace
especialmente adecuado para la inclusión en aplicaciones de escritorio o
versiones de desarrollo de aplicaciones web.
Hay también módulos para analizar formatos definidos más formalmente, útiles para
intercambiar datos entre programas en Python y aplicaciones escritas en otros
lenguajes. xml.etree.ElementTree
puede analizar documentos XML, y
proporciona varios modos de funcionamiento para diferentes aplicaciones. Además
de las herramientas de análisis, ElementTree
incluye una interfaz para
crear documentos XML bien formados a partir de objetos en memoria. El módulo
csv
puede leer y escribir datos tabulares en formatos producidos por
hojas de cálculo o aplicaciones de bases de datos, por lo que es útil para
cargar datos a granel o convertir los datos de un formato a otro.