【发布时间】:2019-05-15 14:47:51
【问题描述】:
我想知道以前是否有人遇到过这个问题。
我有一个运行 Python 3.7.3、SqlAlchemy 和 Falcon 的应用程序在 Docker 容器中运行。
我的数据库是 MariaDB,也在 docker 容器中运行。
我将 SqlAlchemy pool_recycle 设置为 3600,但它仍然不时断开连接。
我在日志中看不到任何内容,但 SQLAlchemy 日志指出在尝试执行某些查询后连接已丢失。
问题可能出在哪里? SQLAlchemy 配置?玛丽亚数据库?也许是码头工人? 我该如何检查?
我的仓库:
class NfeRepositorio:
def __init__(self, db_session: sessionmaker):
self.session_factory = scoped_session(db_session)
self._session = None
def __enter__(self):
return self
def __exit__(self, ex_type, ex_value, ex_traceback):
self.session_factory.remove()
@property
def session(self):
if not self._session:x
self._session = self.session_factory()
return self._session
我的引擎设置:
orm_engine = create_engine(
get_config().ORM_ENGINE_TEMPLATE.format(
get_config().DB_PROTOCOL,
get_config().DB_USERNAME,
get_config().DB_PASSWORD,
get_config().DB_HOST,
get_config().DB_NAME
),
echo=get_config().ORM_ECHO,
pool_recycle=3600
)
编辑 1:
刚刚找到一个日志条目并在谷歌上做了一些研究。几个人有同样的问题。
[Warning] Aborted connection to db (Got timeout reading communication packets)
看起来这个问题与 SqlAlchemy 会话和 MySql 会话之间的区别有关。下面的 SO 帖子解释得更好。 How to close a SQLAlchemy session?
我会试一试并发布结果。
【问题讨论】:
-
你的意思是
pool_recycle? -
您是否在使用后关闭会话?
-
@pnv 感谢您的回复。我刚刚更新了我的问题。
-
西德尼:是的,我看到了。这就是我建议将此标记为与另一个重复的原因。
-
不客气。标记为重复是集中问题及其答案的好方法,因此信息不会通过不同但相似的问题分布。
标签: python docker sqlalchemy