Eu me pego aprendendo a cada semana uma ou mais coisas novas, pelo menos da perspectiva da minha própria experiência pessoal. Então, pensei que compartilhá-lo aqui seria uma boa maneira de solidificar parte desse conhecimento, manter um registro dele e potencialmente ajudar alguém a aprender algo que não sabia anteriormente.
Esta semana aprendi que é possível escrever um script python que pode pegar uma lista de nomes de backup de banco de dados, importar um banco de dados para o MySQL, iniciar um contexto Flask e executar um relatório no banco de dados como ele está, e em seguida, enxágue e repita.
Talvez isso pareça um conceito simples, mas tentar alcançá-lo usando uma abordagem predominantemente padrão provou ser enganosamente desafiador. Comecei simplesmente escrevendo um script que importava o backup, depois executei o relatório sobre os dados importados e coloquei isso em um loop. Mas, infelizmente, me deparei com um terminal que travou na segunda iteração do loop e comecei a analisar o que poderia estar acontecendo.
O primeiro pensamento que me veio à mente foi que as importações que eu estava fazendo do aplicativo Flask estavam causando o bloqueio da importação, pois o script ainda não havia sido finalizado, então o bloqueio que mantinha a conexão do banco de dados com o Flask ainda estava ativo , mas não houve nenhuma mensagem de erro para me informar que isso estava acontecendo, e presumo que isso seja intencional, então usei minha experiência com o Flask para racionalizar que esse era provavelmente o caso.
Então, procurei como simplesmente 'desimportar' os módulos que importei do Flask e me deparei com a palavra-chave del em python para fazer o trabalho e tentei novamente ... Apenas para encontrar o mesmo terminal suspenso com o qual me sentei anteriormente. Então, estava de volta à prancheta.
O próximo pensamento que tive foi que pode ser que os módulos tenham sido removidos, mas o contexto do aplicativo Flask ainda está em execução em algum lugar. Para forçar o contexto do aplicativo Flask a ser executado e parar onde eu queria, tentei uma abordagem que havia usado em uma tarefa anterior há cerca de 2 anos, onde precisava usar o contexto do aplicativo Flask para enviar e-mails de forma assíncrona.
Tentei então importar o aplicativo de dentro do loop for e, em seguida, usar o comando with app.app_context(): para forçar o Flask a iniciar e parar apenas dentro deste contexto especificado. Em seguida, executei o script e observei o terminal com a respiração suspensa enquanto esperava o minuto ou mais que o banco de dados demorava para importar no primeiro loop, então comecei com o segundo como antes, e então, sucesso! A segunda importação funcionou e obtive a saída esperada da próxima etapa indicando que o relatório havia sido concluído, que verifiquei no arquivo de saída.Fiquei satisfeito com meus resultados, pois isso não era algo que eu tinha feito antes, então fiquei feliz por poder descobrir e fazer funcionar conforme o esperado.
Você deve estar se perguntando por que eu estava tentando fazer isso em primeiro lugar e, bem, essa é uma boa pergunta. Recebi a tarefa de extrair um relatório mensal histórico que exigia dados que não foram salvos em nenhum outro lugar além dos backups do banco de dados e que não podiam ser coletados do banco de dados ativo atual, então eu só tinha backups para trabalhar para extrair esses dados . Foi isso que me levou a aprender como gerenciar o contexto do Flask junto com as importações de banco de dados.
Para quem gosta de ler um pouco de código, foi assim que estruturei meu script:
Isso é altamente específico, e eu percebo isso, mas também não é um tutorial, é puramente uma válvula de escape para minha experiência pessoal de aprendizado, que gostaria de compartilhar aqui na esperança de que se torne uma leitura interessante ou um dica útil para alguém, em algum lugar por aí.
Se você chegou até aqui, gostaria de agradecer pela leitura e espero que você se junte a mim na minha próxima postagem.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3