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.