Cada semana me encuentro aprendiendo una o más cosas nuevas, al menos desde la perspectiva de mi propia experiencia personal. Entonces, pensé que compartirlo aquí sería una buena manera de solidificar parte de ese conocimiento, mantener un registro del mismo y, potencialmente, ayudar a otra persona a aprender algo que no sabía antes.
Esta semana aprendí que es posible escribir un script en Python que puede tomar una lista de nombres de copias de seguridad de bases de datos, importar una base de datos a MySQL, luego iniciar un contexto de Flask y ejecutar un informe sobre la base de datos tal como está, y luego enjuague y repita.
Tal vez esto parezca un concepto simple, pero tratar de lograrlo utilizando un enfoque mayoritariamente estándar resultó ser engañosamente desafiante. Comencé simplemente escribiendo un script que importaba la copia de seguridad, luego ejecuté el informe sobre los datos importados y lo puse en un bucle. Pero, lamentablemente, me encontré con una terminal que colgaba en la segunda iteración del bucle, así que comencé a analizar lo que podría estar sucediendo.
El primer pensamiento que me vino a la mente fue que las importaciones que estaba realizando desde la aplicación Flask estaban provocando que la importación se bloqueara ya que el script aún no había finalizado, por lo que el bloqueo que mantenía la conexión de la base de datos con Flask todavía estaba activo. , pero no hubo ningún mensaje de error para informarme que esto estaba sucediendo, y asumo que esto es así por diseño, así que usé mi experiencia con Flask para racionalizar que lo más probable es que este fuera el caso.
Entonces, fui y busqué cómo simplemente 'desimportar' los módulos que había importado de Flask y encontré la palabra clave del en Python para hacer el trabajo y lo intenté nuevamente... Solo para encontrarme con el mismo terminal colgante con el que me había sentado anteriormente. Entonces, volvimos a la mesa de dibujo.
El siguiente pensamiento que tuve fue que podría ser que los módulos se hayan eliminado, pero el contexto de la aplicación Flask todavía se está ejecutando en alguna parte. Para forzar que el contexto de la aplicación Flask se ejecutara y se detuviera donde quería, probé un enfoque que había usado en una tarea anterior hace unos 2 años en el que necesitaba usar el contexto de la aplicación Flask para enviar correos electrónicos de forma asincrónica.
Luego intenté importar la aplicación desde el bucle for y luego usé el comando with app.app_context(): para forzar a Flask a iniciarse y detenerse solo dentro de este contexto especificado. Luego ejecuté el script y observé la terminal con gran expectación mientras esperaba aproximadamente el minuto que tardaba la base de datos en importarse en el primer ciclo, luego comenzó con el segundo como lo había hecho antes, y luego, ¡éxito! La segunda importación funcionó y obtuve el resultado esperado del siguiente paso que indicaba que el informe se había completado, lo cual verifiqué con el archivo de salida.
Me sentí satisfecho con mis resultados ya que esto no era algo que hubiera hecho antes, así que me alegré de poder resolverlo y hacerlo funcionar como se esperaba.
Quizás te preguntes por qué estaba intentando hacer esto en primer lugar, y bueno, esa es una buena pregunta. Se me asignó la tarea de generar un informe mensual histórico que requería datos que no se habían guardado en ningún otro lugar que no fuera las copias de seguridad de la base de datos, y que no se podían recopilar de la base de datos activa actual, por lo que solo tenía copias de seguridad con las que trabajar para extraer estos datos. . Que es lo que me llevó a aprender cómo administrar el contexto de Flask junto con las importaciones de bases de datos.
Para aquellos que disfrutan un poco de la lectura de códigos, así es como estructuré mi script:
import os # for running the database import command backup_name_list = [ "backup1", "backup2" ] for backup_name in backup_name_list: # do all necessary changes or checks on the db name here command = f"mysql -u db_user_name --password='SomePassword' db_nameY eso es todo, así es como pude extraer datos históricos solo de las copias de seguridad de la base de datos.
Esto es muy específico, y me doy cuenta de ello, pero tampoco es un tutorial, es puramente una salida para mi experiencia de aprendizaje personal, que me gustaría compartir aquí con la esperanza de que se convierta en una lectura interesante o en una consejo útil para alguien, en algún lugar por ahí.
Si has llegado hasta aquí, me gustaría agradecerte por leer y espero que me acompañes en mi próxima publicación.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3