我有一段相当简单的 Python 代码片段,用于运行一个 Postgres 查询并将结果发送到仪表板。我使用 psycopg2
定期运行相同的查询。暂时不用担心循环机制。
conn = psycopg2.connect(<connection info>)
while True:
# Run query and update dashboard
cur = conn.cursor()
cur.execute(q_tcc)
query_results = cur.fetchall()
update_dashboard(query_results)
time.sleep(5)
供参考,实际查询为:
q_tcc = """SELECT client_addr, application_name, count(*) cnt FROM pg_stat_activity
GROUP BY client_addr, application_name ORDER BY cnt DESC;"""
当我运行这个程序时,即使结果应该会发生变化,但我仍然得到相同的结果。如果我将
psycopg2.connect()
语句移动到循环中,并加上conn.close()
,则一切都正常工作。然而,根据连接和游标文档,我应该能够在整个过程中继续使用相同的游标(因此也是连接)。这是否意味着Postgres正在按客户端连接缓存我的查询?
sleep
之前,你应该很可能关闭你的游标。 - Dmitri Goldring