使用 SQLAlchemy 预 ping 时数据库连接中断
Database connection broken even with with SQLAlchemy pre-ping
自从我将数据库从 mssql docker 容器移动到 azure 数据库作为服务后,我的 Web 应用程序 (flask) 在几分钟后断开连接。
刷新页面就解决了,但是还是有问题。
SQLAlchemy 引发的错误是操作错误 (https://docs.sqlalchemy.org/en/14/errors.html#error-e3q8)
我尝试在 create_engine
函数中实现 pool_pre_ping=True
选项,错误没有解决。
我认为断开连接是由数据库发起的,但我不知道是否有更改它的选项。 (数据库是 SQL Server 12.0)
我之前遇到过同样的问题。我通过 create_engine
函数的 pool_recycle
选项解决了它。
数据库本身有默认的连接维护时间。当在一定时期内不使用连接时(DB 设置),然后 DB 关闭该连接。
因此,您需要将 pool_recycle
时间设置为低于数据库连接维护时间。
示例,
create_engine("...", pool_recycle=3600, pool_pre_ping=True)
查看document了解更多信息
因为我使用的是 Flask-SQLAlchemy,所以有配置参数来回收池。
我通过删除 create_engine
函数解决了我的问题。
我只是将 SQLALCHEMY_POOL_RECYCLE = 300
添加到我的配置文件中。
自从我将数据库从 mssql docker 容器移动到 azure 数据库作为服务后,我的 Web 应用程序 (flask) 在几分钟后断开连接。
刷新页面就解决了,但是还是有问题。
SQLAlchemy 引发的错误是操作错误 (https://docs.sqlalchemy.org/en/14/errors.html#error-e3q8)
我尝试在 create_engine
函数中实现 pool_pre_ping=True
选项,错误没有解决。
我认为断开连接是由数据库发起的,但我不知道是否有更改它的选项。 (数据库是 SQL Server 12.0)
我之前遇到过同样的问题。我通过 create_engine
函数的 pool_recycle
选项解决了它。
数据库本身有默认的连接维护时间。当在一定时期内不使用连接时(DB 设置),然后 DB 关闭该连接。
因此,您需要将 pool_recycle
时间设置为低于数据库连接维护时间。
示例,
create_engine("...", pool_recycle=3600, pool_pre_ping=True)
查看document了解更多信息
因为我使用的是 Flask-SQLAlchemy,所以有配置参数来回收池。
我通过删除 create_engine
函数解决了我的问题。
我只是将 SQLALCHEMY_POOL_RECYCLE = 300
添加到我的配置文件中。