【发布时间】:2020-06-02 19:29:45
【问题描述】:
我正在使用 Python、Flask、MySQL 和 uWSGI 开发一个基于 Web 的应用程序。但是,我不使用 SQL Alchemy 或任何其他 ORM。我正在使用旧 PHP 应用程序中的一个预先存在的数据库,它无论如何都不能很好地与 ORM 配合使用,所以我只是使用 mysql-connector 并手动编写查询。
当我第一次启动应用程序时,它可以正常工作,但是当我第二天早上回来时,我发现它已经坏了。我会收到类似mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query 或类似mysql.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 数据库的持续打开连接。或者我可能完全是在叫错树,如果有人知道的话。
【问题讨论】:
-
发布后我发现了池连接。我知道它适用于多线程应用程序,而我的不是,但它很容易实现,我希望它有所帮助。当然,要等到明天我才能知道它是否确实如此,而且我仍然愿意接受更好的解决方案。
标签: python mysql flask mysql-python mysql-connector-python