[英]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.