Postgresql 为什么我在我的flask应用程序中使用flask登录时一直得到sqlalchemy超时?

Postgresql 为什么我在我的flask应用程序中使用flask登录时一直得到sqlalchemy超时?,postgresql,docker,sqlalchemy,flask-sqlalchemy,flask-login,Postgresql,Docker,Sqlalchemy,Flask Sqlalchemy,Flask Login,我正在Docker swarm中运行一个Flask web应用程序,它利用Flask登录进行用户身份验证。我对一个用户类进行了建模,并使用Flask SQLAlchemy将应用程序连接到位于AWS RDS db实例上的Postgres数据库 Flask Login期望放置在模型类中的函数根据用户ID查找用户,定义如下: @login.user_loader def load_user(id): return User.query.get(int(id)) Flask Login然后使用

我正在Docker swarm中运行一个Flask web应用程序,它利用Flask登录进行用户身份验证。我对一个用户类进行了建模,并使用Flask SQLAlchemy将应用程序连接到位于AWS RDS db实例上的Postgres数据库

Flask Login期望放置在模型类中的函数根据用户ID查找用户,定义如下:

@login.user_loader
def load_user(id):
    return User.query.get(int(id))
Flask Login然后使用此函数调用您的用户模型,以获取会话中存储的当前用户的信息

这一切在大多数情况下都很好,但我偶尔会遇到这样一个问题:这个调用会导致Postgres连接中断。当我连接到AWS postgres实例或本地运行的postgres Docker实例时,都会发生这种情况

AWS超时错误:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) SSL SYSCALL error: EOF detected

[SQL: SELECT users.id AS users_id, users.name AS users_name, ***TRIMMED*** 
FROM users 
WHERE users.id = %(param_1)s]
[parameters: {'param_1': 14}]
(Background on this error at: http://sqlalche.me/e/e3q8)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

[SQL: SELECT users.id AS users_id, users.name AS users_name, ***TRIMMED*** 
FROM users 
WHERE users.id = %(param_1)s]
[parameters: {'param_1': 14}]
(Background on this error at: http://sqlalche.me/e/e3q8)
Docker(本地数据库)超时:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) SSL SYSCALL error: EOF detected

[SQL: SELECT users.id AS users_id, users.name AS users_name, ***TRIMMED*** 
FROM users 
WHERE users.id = %(param_1)s]
[parameters: {'param_1': 14}]
(Background on this error at: http://sqlalche.me/e/e3q8)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

[SQL: SELECT users.id AS users_id, users.name AS users_name, ***TRIMMED*** 
FROM users 
WHERE users.id = %(param_1)s]
[parameters: {'param_1': 14}]
(Background on this error at: http://sqlalche.me/e/e3q8)
我遇到过一篇文章,谈到在SQLAlchemy中使用
pool\u pre\u ping
参数,这基本上使SQLAlchemy在继续之前总是先测试连接(请阅读更多)。所以我更新了我的炼金术实例来反映这一点

db = SQLAlchemy(engine_options={'pool_pre_ping': True})

尽管如此,我仍然遇到了这个问题……尽管不是那么频繁。有人知道吗?我知道这很可能与SQLAlchemy池连接的方式有关,但我不确定是什么。

不确定这是否有帮助,但我的SQLAlchemy连接字符串中有以下内容(注意池循环)

我基本上是一个业余的w/SQLAlchemy,但是我在不久前从文档中得到了这个,并且把它作为一个理所当然的事情放进去了。我还注意到它可能是mySQL特有的。我没有深入研究3600分钟后会发生什么