gpt4 book ai didi

python - psycopg2.OperationalError 错误

转载 作者:行者123 更新时间:2023-12-05 07:11:51 24 4
gpt4 key购买 nike

我创建了一个 Python flask Web 应用程序,并使用 gunicorn 将其部署在 Azure App 服务 上。 Web 应用使用 flask_sqlalchemy 连接到 PostgreSQL 数据库,该数据库也部署在 Azure Database for PostgreSQL 服务器上。

在网络应用程序插入包含六个字段的一行的“小”查询后,我有时会收到以下错误:

sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). 
Original exception was: (psycopg2.OperationalError) SSL SYSCALL error: EOF detected

[SQL: INSERT INTO <table>]
[parameters: <row's parameters>]
(Background on this error at: http://sqlalche.me/e/e3q8) (Background on this error at: http://sqlalche.me/e/7s2a)

虽然网络应用程序仍在部署,但我重新启动了数据库服务器,发现连接中断导致了错误。如果我随后重新启动应用程序服务,问题就会得到解决。

当我在本地部署 Web 应用程序并断开数据库连接时,我收到了略有不同的错误:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

[SQL: INSERT INTO <table>]
[parameters: <row's parameters>]
(Background on this error at: http://sqlalche.me/e/e3q8)

遵循 SQLAlchemy 的建议,我将数据库连接更改为:

db = SQLAlchemy(engine_options={"pool_pre_ping": True})

这解决了本地部署的 Web 应用程序的问题,但 Azure 部署的 Web 应用程序仍然出现相同的错误消息。

有什么建议吗?

点卡住:

aniso8601==8.0.0
atomicwrites==1.3.0
attrs==19.3.0
certifi==2019.11.28
cffi==1.14.0
chardet==3.0.4
Click==7.0
colorama==0.4.3
cryptography==2.8
Flask==1.1.1
flask-restx==0.1.1
Flask-SQLAlchemy==2.4.1
idna==2.8
importlib-metadata==1.5.0
itsdangerous==1.1.0
Jinja2==2.11.1
jsonschema==3.2.0
jwt==0.6.1
MarkupSafe==1.1.1
more-itertools==8.2.0
numpy==1.18.1
packaging==20.1
pandas==1.0.1
pluggy==0.13.1
psycopg2==2.8.4
py==1.8.1
pycparser==2.19
PyJWT==1.7.1
pyparsing==2.4.6
pyrsistent==0.15.7
pytest==5.3.5
python-dateutil==2.8.1
pytz==2019.3
requests==2.22.0
scipy==1.4.1
six==1.14.0
SQLAlchemy==1.3.13
urllib3==1.25.8
wcwidth==0.1.8
Werkzeug==0.16.1
wincertstore==0.2
zipp==3.0.0

最佳答案

我们通过增加与数据库的防御性连接来修复此问题;将所有连接放入 try/catch 中,如果引发 psycopg2 异常,则定期刷新并重试。

attempts = 0
while attempts <= 5:
attempts = attempts + 1
logger.info("Attempt " + str(attempts))
try:
db.session.add(job_status)
db.session.commit()
return
except (SQLAlchemyError, OperationalError) as e:
if attempts < 5:
logger.warning("Attempt failed. Trying rollback")
db.session.rollback()
time.sleep(5)
else:
logger.error("Maximum number of retries reached. Raising an error")
raise e
<小时/>

答案取自updatequestion通过 AmyChodorowski

关于python - psycopg2.OperationalError 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60614632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com