我正在编写一个专有脚本,用于查询公司数据库以提取某些信息。我正在使用 Psycopg2。在这一点上,我使用的线条是这样的:
conn = psycopg2.connect("dbname='somedb' user='usr' host='something.azure.com' password='pswd' port='5432'")
cur = conn.cursor()
query = "something"
cur.execute(query)
results = cur.fetchall()
直到几天前脚本运行良好,在调试期间快速连续运行后,我开始得到:
psycopg2.OperationalError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
仔细一看,我意识到我没有正确关闭连接。所以我修改为:
with psycopg2.connect("dbname='somedb' user='usr' host='something.azure.com' password='pswd' port='5432'") as conn:
cur = conn.cursor()
query = "something"
cur.execute(query)
results = cur.fetchall()
即使服务器端没有其他连接,错误仍然存在,因此点击 max_connection 不太可能是这里的原因。
奇怪的是,我可以通过 PGAdmin 访问同一台服务器,或者在同一台机器上使用 sqlalchemy.create_engine
和 pandas.read_sql
。此外,该脚本在另一位同事的机器上运行良好,同时通过 VPN 模仿我的 IP 地址。
编辑:sqlalchemy 只为我的机器工作了一次,之后我开始遇到同样的错误。 我的 sqlalchemy 代码:
engine = create_engine('postgresql://{0}:{1}@{2}:5432/db'.format(USR, PSWD, HOST))
query = "something"
df = pd.read_sql(sql=query, con=engine)