我想知道以前是否有人遇到过这个问题。
我有一个在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?
我会尝试一下并发布结果。
答案 0 :(得分:0)
可以找到答案here。 MySql会话和SQLAlchemy会话之间有区别。关闭SqlAlchemy会话不必关闭MySql连接。可以在提供的链接或at the official documentation上找到更多详细信息。