«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Чему я научился на этой неделе #0

Чему я научился на этой неделе #0

Опубликовано 29 июля 2024 г.
Просматривать:526

What I

Каждую неделю я узнаю одну или несколько новых вещей, по крайней мере, с точки зрения моего личного опыта. Итак, я подумал, что поделиться ими здесь будет хорошим способом закрепить некоторые из этих знаний, вести их учет и потенциально помочь кому-то еще узнать что-то, чего они раньше не знали.

На этой неделе я узнал, что можно написать скрипт Python, который может принимать список имен резервных копий базы данных, импортировать базу данных в MySQL, затем запускать контекст Flask и запускать отчет по базе данных в ее нынешнем виде, и затем промойте и повторите.

Может быть, это звучит как простая концепция, но попытка добиться этого, используя в основном стандартный подход, оказалась обманчиво сложной задачей. Я начал с простого написания сценария, который импортировал резервную копию, затем запускал отчет по импортированным данным и помещал его в цикл. Но, к сожалению, я столкнулся с терминалом, который зависал на второй итерации цикла, и поэтому я начал разбираться в том, что может произойти.

Первая мысль, которая пришла на ум, заключалась в том, что импорт, который я делал из приложения Flask, приводил к блокировке импорта, поскольку сценарий еще не завершился, поэтому блокировка, удерживающая соединение с базой данных с Flask, все еще была активна. , но не было никакого сообщения об ошибке, сообщающего мне, что это происходит, и я предполагаю, что это задумано, поэтому я использовал свой опыт работы с Flask, чтобы объяснить, что это, скорее всего, так и есть.

Итак, я пошел искать, как просто «отменить импорт» модулей, которые я импортировал из Flask, и наткнулся на ключевое слово del в Python, чтобы выполнить работу, и попробовал еще раз... Только чтобы встретить тот же подвесной терминал, с которым я сидел раньше. Итак, мы вернулись к чертежной доске.

Следующая мысль, которая у меня возникла, заключалась в том, что, возможно, модули были удалены, но контекст приложения Flask все еще где-то работает. Чтобы заставить контекст приложения Flask запускаться и останавливаться там, где я хотел, я попробовал подход, который я использовал в предыдущей задаче около 2 лет назад, когда мне нужно было использовать контекст приложения Flask для асинхронной отправки электронных писем.

Затем я попытался импортировать приложение из цикла for, а затем использовать команду with app.app_context():, чтобы заставить Flask запускаться и останавливаться только в этом указанном контексте. Затем я запустил сценарий и, затаив дыхание, наблюдал за терминалом, пока ждал минуту или около того, пока база данных импортировалась в первом цикле, затем все началось со второго, как и раньше, и затем успех! Второй импорт сработал, и я получил ожидаемый результат следующего шага, указывающий, что отчет был завершен, что я сверил с выходным файлом.

Я был доволен своими результатами, так как раньше я такого не делал, поэтому я был рад, что смог разобраться и заставить это работать так, как ожидалось.

Возможно, вам интересно, почему я вообще пытался это сделать, и это хороший вопрос. Мне было поручено получить исторический ежемесячный отчет, для которого требовались данные, которые не были сохранены нигде, кроме резервных копий базы данных, и которые нельзя было собрать из текущей действующей базы данных, поэтому у меня были только резервные копии, с которыми я мог работать, чтобы получить эти данные. . Именно это привело меня к изучению того, как управлять контекстом Flask наряду с импортом базы данных.

Для тех, кто любит читать код, я структурировал свой скрипт следующим образом:

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_name 



И все, именно так я смог извлечь исторические данные только из резервных копий базы данных.

Это очень специфично, и я это понимаю, но это также не учебное пособие, а просто выражение моего личного опыта обучения, которым я хотел бы поделиться здесь в надежде, что оно станет либо интересным чтением, либо полезным. полезный совет кому-то где-то там.

Если вы дочитали до этого момента, я хотел бы поблагодарить вас за чтение и надеюсь, что вы присоединитесь ко мне в моем следующем посте.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/kyledev008/what-ive-learned-this-week-0-57ek?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3