Preparar copias y comprobar la recuperación

Ciencia y tecnologíaPreparar copias y comprobar la recuperación

Una aplicación puede pasar sus pruebas y aun así perderse por borrar una carpeta. Hoy prepararás una copia del inventario y comprobarás que puedes utilizarla. No basta con ver un archivo de tamaño parecido: una copia útil debe contener los datos esperados y abrirse correctamente. Practicaremos con información inventada y conservaremos siempre el original.

Separar lo que puedes reconstruir de lo que no

El código describe cómo funciona el programa. La base de datos conserva los artículos introducidos. El entorno virtual se puede recrear siguiendo instrucciones. Si mezclas esas tres cosas en tu cabeza puedes copiar una carpeta enorme y olvidar precisamente el archivo importante. Anota la ubicación exacta de inventario.db y la de los módulos Python.

El CSV exportado también puede servir para recuperar artículos pero no es una copia completa de cualquier base de datos. Conserva solo las columnas que has exportado. Si en el futuro añades historial, configuraciones o relaciones una exportación parcial no los incluirá automáticamente. Debes saber qué contiene cada respaldo antes de necesitarlo.

Elegir una copia con la aplicación cerrada

Para esta práctica detén el programa y cierra cualquier herramienta que tenga abierta la base. Copiaremos el archivo cuando no haya ninguna conexión activa y las operaciones hayan terminado. No generalices este procedimiento a una base en uso: SQLite puede utilizar archivos auxiliares y una copia ordinaria durante una escritura no garantiza un estado coherente.

SQLite ofrece una API específica de respaldo para otros escenarios. Aquí preferimos un procedimiento sencillo y explícitamente limitado al trabajo cerrado. Como nuestra interfaz abre una conexión para cada orden y la cierra al terminar, basta con esperar a que la orden finalice y asegurarte de que ningún otro proceso utiliza ese archivo.

from pathlib import Path

origen = Path("inventario.db") destino = Path("inventario-copia-01.db")

with origen.open("rb") as entrada: with destino.open("xb") as salida: shutil.copyfileobj(entrada, salida)

print("Copia creada:", destino.resolve()) «`

Guarda este ejemplo como copia_cerrada.py dentro de la carpeta que contiene la base de prueba. El modo rb lee bytes y xb crea un destino nuevo en modo binario. Si el destino existe la copia se detiene sin sustituirlo. No cambies a wb para reutilizar el nombre hasta comprender qué archivo estarías sobrescribiendo.

Una operación terminada debe verificarse

Si la copia falla a mitad puede quedar un destino incompleto. No lo consideres válido solo porque aparezca en el explorador. El código imprime el mensaje final únicamente después de cerrar ambos archivos sin error. Aun así debes realizar una comprobación de apertura y contenido. Guarda los respaldos correctos con nombres que permitan distinguirlos de intentos fallidos.

Abre la copia en una conexión independiente y realiza una consulta. Compara los códigos y las cantidades que esperabas. No utilices el módulo conectar para esta primera comprobación si quieres asegurarte de que no cree tablas en una copia equivocada. Puedes abrirla en modo de solo lectura mediante una URI de SQLite.

uri = destino.resolve().as_uri() + "?mode=ro" conexion = sqlite3.connect(uri, uri=True) try: print(conexion.execute("PRAGMA quick_check").fetchone()[0]) print(conexion.execute("SELECT COUNT(*) FROM articulos").fetchone()[0]) finally: conexion.close() «`

quick_check comprueba aspectos de integridad interna y una salida ok es una buena señal. No demuestra que hayas copiado todos los artículos que querías ni que los nombres sean correctos. Por eso también debes consultar datos conocidos. Integridad estructural y contenido esperado son comprobaciones distintas que se complementan.

Ensayar la restauración sin destruir el original

Restaurar para practicar no exige borrar la base actual. Utiliza otra carpeta o indica la ruta de la copia a la aplicación. Consulta un artículo conocido y realiza un alta de prueba exclusivamente sobre esa copia. Después verifica que el original conserva su recuento. Habrás demostrado que puedes trabajar con el respaldo sin depender del archivo inicial.

No pruebes una restauración por primera vez cuando ya hayas perdido los datos. Un ensayo pequeño revela rutas olvidadas, archivos incompletos y pasos que no estaban documentados. Escribe una secuencia que puedas seguir dentro de un mes. Incluye cómo identificar la copia correcta y cómo comprobar que la aplicación está utilizando esa ruta.

Conservar más de una versión

Una única copia que sustituyes continuamente puede incorporar un error que todavía no has descubierto. Mantener varias versiones permite volver a un estado anterior. Para el ejercicio utiliza nombres numerados y registra su contenido. En un uso real definirías una periodicidad y un lugar separado según el valor de los datos y tus necesidades.

Guardar una copia en el mismo disco ayuda frente a algunos errores de edición pero no frente a la pérdida de ese disco. No necesitas diseñar una infraestructura compleja para este curso. Sí debes reconocer qué problema resuelve tu procedimiento y cuál queda fuera. Una buena explicación de sus límites forma parte del aprendizaje técnico.

Errores habituales

Copiar la base mientras otra herramienta la está modificando es el fallo principal que evitamos aquí. También puede ocurrir que pruebes el original creyendo que es la copia. Muestra siempre la ruta absoluta antes de una comprobación. El nombre inventario.db por sí solo no identifica una ubicación entre varias carpetas.

Otro error es considerar que un respaldo sin ensayar ya garantiza recuperación. Registra la consulta realizada y el resultado observado. Si no sabes abrirlo o no contiene los registros esperados todavía tienes trabajo pendiente. La copia se convierte en una herramienta de recuperación cuando puedes demostrar su uso con un procedimiento repetible.

Lo que deberías recordar

  • Código, entorno y datos necesitan tratamientos distintos.
  • La copia ordinaria se realiza con la base cerrada.
  • Comprueba estructura y contenido.
  • Ensaya la recuperación sin borrar el original.

Ejercicio práctico

Crea una base de prueba con dos artículos y cierra todas sus conexiones. Ejecuta copia_cerrada.py para obtener un destino nuevo. Anota las rutas absolutas del original y de la copia. Repite la orden y confirma que no sobrescribe la copia existente.

Abre el respaldo en modo de solo lectura, ejecuta quick_check y cuenta los artículos. Consulta además uno de sus códigos conocidos. Registra los resultados. Si alguna comprobación falla conserva el original y repite la copia con otro nombre después de investigar la causa.

Ensaya el uso de la copia como base de trabajo en una carpeta separada. Añade allí un artículo y comprueba que el original mantiene su recuento. Escribe instrucciones de recuperación de cinco pasos y señala expresamente que el procedimiento de copia exige que la base esté cerrada. No borres el original como parte del ejercicio.

Siguiente: Integrar el inventario y el intercambio de archivos.

Volver al índice de Programar con Python.

Últimos posts

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí

 

Artículos más vistos

Horóscopo diario
Menú diario