sqlalchemy随机错误重置期间出现异常或类似情况-对功能没有影响



我有一个应用程序正在运行,这个堆栈跟踪不时显示在控制台中。然而,该应用程序继续平稳运行。不管怎样,我真的不喜欢应用程序中这种不可预测的行为。我可以避免此类错误消息吗?所有查询都返回了正确的数据,更新工作正常。不知道为什么日志中不断出现此消息。

Exception during reset or similar
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 663, in _finalize_fairy
fairy._reset(pool)
File "/usr/local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 868, in _reset
pool._dialect.do_rollback(self)
File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 631, in do_rollback
dbapi_connection.rollback()
psycopg2.OperationalError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

这就是我创建会话和查询的方式示例:

engine = create_engine(
settings.SQLALCHEMY_DATABASE_URI,
pool_pre_ping=True,
echo=False,
connect_args={"connect_timeout": 30},
pool_size=20,
max_overflow=100,
)
Base.metadata.create_all(engine)
SessionLocal = sessionmaker(expire_on_commit=True, autocommit=False, autoflush=False, bind=engine)

查询示例:

def get_user_name(username: str, s=None) -> str:
if s is None:
s = SessionLocal()
try:
user_obj = s.query(User).filter_by(username=username)
if len(list(user_obj)) < 1:
return username
return user_obj.first().first_name
except Exception as ex:
s.rollback()
logger.exception(f"Failed while Error : {ex}")

您确实想要这些消息。它们表示您的参数pool_pre_ping=True按预期工作。事情的本质是不可预测的行为,因为它正是在处理那些不可预测时刻。

我想你可以试着把它包装起来,这样它就不会出现在你的控制台上:

try:
<connect to db>
except psycopg2.OperationalError:
<log to file>

最新更新