当前位置: 首页 > 面试题库 >

避免在不经常使用的带有SQLAlchemy的Python / Flask服务器上使用“ MySQL服务器已消失”

昌山
2023-03-14
问题内容

如果不存在,如何配置Flask / SQLAlchemy创建一个新的数据库连接?

我有一个不常使用SQLAlchemy的Python / Flask服务器。它每两天都会被访问一次,并且在第一次访问时经常会引发“
MySQL服务器已消失”错误。后续的页面浏览量很好,但是出现此初始错误看起来并不专业。

我想知道正确的处理方式-像“做一个很长的时间”这样的建议,在这种情况下大约需要4天,似乎并不正确。如何测试缺少数据库连接并在需要时创建一个数据库连接?


问题答案:

之前我遇到过麻烦,发现处理此问题的方法是不保留会话。问题是您试图将连接保持打开状态的时间过长。相反,请__init__.py在导入到各处的实用程序包中或之中使用线程本地范围的会话,如下所示:

from sqlalchemy.orm import scoped_session, sessionmaker
Session = scoped_session( sessionmaker() )

然后,一次设置引擎和元数据。这样,您每次连接/断开连接时都可以跳过配置机制。之后,您可以像这样进行数据库工作:

session = Session()
someObject = session.query( someMappedClass ).get( someId )
# use session like normal ...
session.close()

如果您要保留旧对象并且不想让会话保持打开状态,则可以使用上述模式并重用旧对象,如下所示:

session = Session()
someObject = session.merge( someObject )
# more db stuff
session.close()

关键是,您要打开会话,执行工作,然后关闭会话。这样可以很好地避免超时。.merge和.add有很多选项,使您可以包括对分离对象所做的更改或从数据库加载新数据。这些文档非常冗长,但是一旦您知道要查找的内容,可能会更容易找到。

为了真正到达目的地并防止MySQL“消失”,您需要解决连接池保持连接打开时间过长并为您检查旧连接的问题。

要获得新的连接,可以pool_recyclecreate_engine通话中设置选项。将此设置pool_recycle为要创建新连接而不是返回现有连接的签出之间的连接池中的秒数。



 类似资料:
  • > 计数操作失败,出现以下错误消息: OriginalException:ElasticSearch.Net.ElasticSearchClientException:远程服务器返回错误:(503)服务器不可用。调用:状态代码503来自:GET/myindex/_count。ServerError:Type:search_phase_execution_exception原因:“All shard

  • 问题内容: 我有一个脚本,每晚都会做很多事情。 它使用在循环中执行的PDO准备好的语句。 前几个运行良好,但是后来我发现它们都因以下错误而失败:“ MySQL服务器已消失”。 我们运行MySQL 5.0.77。 PHP版本5.2.12 该网站的其余部分运行正常。 问题答案: 该B.5.2.9。MySQL手册中的MySQL服务器已消失,列出了导致此错误的可能原因。 也许您处于其中一种情况?-特别是考

  • 本文向大家介绍在 Django/Flask 开发服务器上使用 HTTPS,包括了在 Django/Flask 开发服务器上使用 HTTPS的使用技巧和注意事项,需要的朋友参考一下 使用 Django 或 Flask 这种框架开发 web app 的时候一般都会用内建服务器开发和调试程序,等程序完成后再移交到生产环境部署。问题是这些内建服务器通常都不支持 HTTPS,我们想在开发的时候就能够使用和测

  • 问题内容: 我有一个带有表“ Staff”的数据库(SQL),其中有两个记录。我需要使用PHP在网页上显示这些记录的内容。 我将如何正确更改while循环,以便它将在页面上显示两个记录。 谢谢! 问题答案: 仅从数据库中检索一行。您需要在循环中调用它以检索所有行。该增量是不必要在这里,因为返回false时,没有更多行可供选择。

  • 问题内容: 我在Heroku服务器上托管了一个网站( 我是Heroku btw的新用户 ),并且由于它是免费软件包,因此在 闲置30m 后便 进入 休眠 状态 ,并在用户点击它后再次将其投入使用,大约需要7秒才能成功。 我正在考虑运行nodejs作业或每隔29m就会打开网站的一次作业,以使服务器永不休眠,最初,我得到的是这样的内容: 注意:那只是在浏览器中打开它,而不是关闭它。 首先,这样做是否合

  • 问题内容: 我在办公室运行服务器以处理一些文件,并将结果报告给远程MySQL服务器。 文件处理需要一些时间,并且过程中途结束,并出现以下错误: 我已经听说过MySQL设置 wait_timeout ,但是是否需要在办公室或远程MySQL服务器上更改它? 问题答案: 检查连接是否容易并在需要时重新建立连接可能会更容易。 有关此信息,请参见PHP:mysqli_ping。