SQLAlchemy连接断开

时间:2019-05-15 14:47:52

标签: python docker sqlalchemy

我想知道以前是否有人遇到过这个问题。

我有一个在Python容器中运行Python 3.7.3,SqlAlchemy和Falcon的应用程序。

我的数据库是MariaDB,它也在docker容器中运行。

我将SqlAlchemy pool_recycle设置为3600,但它仍会不时断开连接。

我在日志中什么也看不到,但是尝试执行某些查询后,SQLAlchemy日志指出连接已丢失。

问题可能出在哪里? SQLAlchemy配置? MariaDB?也许Docker? 我该如何检查?

我的存储库:

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 : 刚找到一个日志条目,并在Google上做了一些研究。几个人有同样的问题。 [Warning] Aborted connection to db (Got timeout reading communication packets)

看起来该问题与SqlAlchemy会话和MySql会话之间的差异有关。下面的SO帖子说明得更好。 How to close a SQLAlchemy session?

我会尝试一下并发布结果。

1 个答案:

答案 0 :(得分:0)

可以找到答案here。 MySql会话和SQLAlchemy会话之间有区别。关闭SqlAlchemy会话不必关闭MySql连接。可以在提供的链接或at the official documentation上找到更多详细信息。