为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信