這週我學到了什麼#0

PHPz
發布: 2024-07-25 22:54:53
原創
728 人瀏覽過

What I

我發現自己每週都會學習一件或多件新事物,至少從我個人經驗的角度來看是這樣。因此,我認為在這裡分享它是鞏固一些知識、記錄下來並有可能幫助其他人學習他們以前不知道的東西的好方法。

本週我了解到可以編寫一個 python 腳本,該腳本可以獲取資料庫備份名稱列表,將資料庫導入 MySQL,然後啟動 Flask 上下文,並按現狀運行資料庫報告,然後沖洗並重複。

也許這聽起來是一個簡單的概念,但事實證明,嘗試使用大多數標準方法來實現這一目標具有欺騙性的挑戰性。我首先簡單地編寫一個導入備份的腳本,然後對導入的資料執行報告,並將其放入循環中。但遺憾的是,我遇到了一個掛在第二次循環迭代上的終端,所以我開始分解可能發生的情況。

首先想到的是,我從Flask 應用程式進行的導入導致導入被阻止,因為腳本尚未終止,因此保持與Flask 的資料庫連接的鎖仍然處於活動狀態,但沒有錯誤訊息告訴我發生了這種情況,我認為這是設計使然,所以我利用Flask 的經驗來合理化這很可能是這種情況。

所以,我去尋找如何簡單地「取消導入」我從Flask 導入的模組,並在python 中遇到了del 關鍵字來完成工作並再次嘗試......結果卻遇到了我之前坐過的那個懸掛終端。所以,一切又回到了繪圖板。

我的下一個想法是,模組可能已被刪除,但 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 < '/path/to/{backup_name}.sql'"
    os.command(command)

    # import the app variable to allow for the context to be created
    from app_module import app_variable

    with app_variable.app_context():
        # do all Flask related imports here
        from app_module import relevant_app_class_or_function

        # run all relevant code here to build up your data from the loaded backup

        # remove the imported modules
        del relevant_app_class_or_function

    # remove the app variable after the context expires just to be safe
    del app_variable

登入後複製

就是這樣,這就是我能夠僅從資料庫備份中提取歷史資料的方法。

這是非常具體的,我意識到,但這也不是教程,它純粹是我個人學習經驗的一個出口,我想在這裡分享,希望它成為一本有趣的讀物或一個對某個地方的某人有幫助的提示。

如果您已經讀到這裡,我想對您的閱讀表示感謝,並希望您能在我的下一篇文章中加入我。

以上是這週我學到了什麼#0的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!