簡體   English   中英

使用 Peewee 處理數據庫斷開連接

[英]Handling Database Disconnection With Peewee

我的代碼將 Peewee 與 MySQL 一起使用。 一切都像魅力一樣,直到我嘗試將它與用於訪問慢速服務器的requests一起使用。 簡而言之,我需要將對象上傳到 MySQL 數據庫,但是我的程序崩潰了 - 在上傳了幾個條目之后 - 出現了以下錯誤:

peewee.OperationalError: (2006, 'MySQL server has gone away')

我理解錯誤,我已經在使用 Flask 應用程序時遇到過這個問題,而 Peewee 文檔在這種情況下幫助了我。 但在這種情況下,我沒有使用 Flask,它只是一個簡單的 Python 腳本。 因此,我無法弄清楚如何解決這個問題。

有趣的是,Peewee 相關部分與 html 請求無關。 我正在做一些與 Peewee 無關的任務,然后我調用了這個方法:

def uploadObj (objekt):
    with myDB.atomic():
        entrylist.insert_many(objekt).execute()
        print ("upload")

我認為問題發生在 html 請求很慢並且連接長時間空閑並斷開連接時。

基於這個答案,我試過:

db = MySQLDatabase(db_name, user=db_username, passwd=db_password, host=db_host, port=db_port)
db.get_conn().ping(True)

但這並沒有解決問題。

對於我的第二次嘗試,我嘗試了以下似乎可以解決問題的代碼:

def uploadObj (objekt):
    try:
        with myDB.atomic():
            entrylist.insert_many(objekt).execute()
            print ("upload")
        myDB.close()
    except:
        myDB.connect()
        with myDB.atomic():
            entrylist.insert_many(objekt).execute()
            print ("upload")

如果連接斷開,我會手動重新連接到數據庫。

我的問題是,這是我可以使用而沒有任何可能問題的正確解決方案嗎? 或者有沒有更好的方法來防止這個問題?

您可以使用重新連接混合:

from playhouse.shortcuts import ReconnectMixin

class ReconnectMySQLDatabase(ReconnectMixin, MySQLDatabase):
    pass

db = ReconnectMySQLDatabase('my_app', ...)

如果您有一個長時間運行的腳本閑置一段時間,如果沒有活動,MySQL 將終止連接。 你可以配置你的mysql服務器不這樣做,或者你可以使用上面的在某些錯誤情況下自動重新連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM