亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python在大約一天后失去與MySQL數據庫的連接

Python在大約一天后失去與MySQL數據庫的連接

森欄 2022-08-02 10:56:03
我正在使用Python,Flask,MySQL和uWSGI開發一個基于Web的應用程序。但是,我沒有使用SQL Alchemy或任何其他ORM。我正在使用來自舊PHP應用程序的預先存在的數據庫,無論如何它都不能很好地與ORM配合使用,所以我只是手動使用和編寫查詢。mysql-connector當我第一次啟動它時,該應用程序可以正常工作,但是當我第二天早上回來時,我發現它已經壞了。我會得到類似或類似的錯誤。mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during querymysql.connector.errors.OperationalError: 2055: Lost connection to MySQL server at '10.0.0.25:3306', system error: 32 Broken pipe我一直在研究它,我想我知道問題是什么。我只是無法找到一個好的解決方案。據我所知,問題在于我保留了對數據庫連接的全局引用,并且由于 Flask 應用程序始終在服務器上運行,因此該連接最終會過期并變得無效。我想為每個查詢創建一個新連接會很簡單,但這似乎遠非理想的解決方案。我想我還可以構建某種連接緩存機制,該機制將在一小時左右后關閉舊連接,然后重新打開它。這是我能夠想到的最好的選擇,但我仍然覺得應該有一個更好的選擇。我環顧四周,大多數收到這些錯誤的人都有巨大或損壞的表,或類似的東西。這里的情況并非如此。舊的PHP應用程序仍然運行良好,表的行數都少于50,000行,列數不到30列,Python應用程序運行良好,直到它運行了大約一天。因此,希望有人有一個很好的解決方案來保持與MySQL數據庫的持續開放連接?;蛘?,也許我完全吠錯了樹,如果是這樣,希望有人知道。
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

我現在有它工作了。使用池連接似乎為我解決了這個問題。


mysql.connector.connect(

    host='10.0.0.25',

    user='xxxxxxx', 

    passwd='xxxxxxx', 

    database='xxxxxxx',

    pool_name='batman',

    pool_size = 3

)


def connection():

    """Get a connection and a cursor from the pool"""

    db = mysql.connector.connect(pool_name = 'batman')

    return (db, db.cursor())

我在每個查詢函數之前調用,然后在返回之前關閉游標和連接。似乎有效。不過,仍然有更好的解決方案。connection()


編輯

從那以后,我找到了一個更好的解決方案。(我仍然偶爾會遇到池連接的問題)。實際上,Flask有一個專用的庫來處理mysql連接,這幾乎是一個直接的替代品。


來自 bash:pip install Flask-MySQL


將 、 、 添加到 Flask 配置中。然后在包含 Flask App 對象的主 Python 文件中:MYSQL_DATABASE_HOSTMYSQL_DATABASE_USERMYSQL_DATABASE_PASSWORDMYSQL_DATABASE_DB


from flaskext.mysql import MySQL

mysql = MySQL()

mysql.init_app(app)

要獲得連接:mysql.get_db().cursor()


所有其他語法都是相同的,從那以后我沒有遇到任何問題。長期以來一直使用此解決方案。


查看完整回答
反對 回復 2022-08-02
  • 1 回答
  • 0 關注
  • 231 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號