【问题标题】:SQLAlchemy connection dropping [duplicate]SQLAlchemy连接断开[重复]
【发布时间】: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


【解决方案1】:

答案可以在here找到。 MySql 会话和 SQLAlchemy 会话之间存在差异。关闭 SqlAlchemy 会话并不一定要关闭 MySql 连接。更多详情可以在提供的链接或at the official documentation找到。

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 2021-10-14
    • 2016-09-03
    • 1970-01-01
    • 2015-06-20
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多