我有一个连接到远程PostgreSQL数据库的Flask应用程序(在Amazon RDS上)。以下是我如何连接数据库的示例:
import psycopg2
import sys
from flask import (Flask, render_template, request, redirect, url_for)
# Start a Flask app
app = Flask(__name__, static_url_path='')
# Connect to RDS database
con = psycopg2.connect(**params)
cur = con.cursor()
@app.route('/', methods=['GET'])
def index():
global cur
args = {}
try:
cur.execute("SELECT * FROM x_table")
except psycopg2.InterfaceError:
con = psycopg2.connect(**params)
cur = con.cursor()
# some additional code here ...
return render_template('index.html', args=args)
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0")
我遇到的问题是,在几分钟不活动后,连接关闭,我必须重新启动应用程序。我添加了一个异常控件来捕获该错误并重新连接,但我仍然收到游标已经关闭的错误。
自动重新连接的正确方法是什么?
答案 0 :(得分:0)
您需要为每个查询创建一个游标。如果它们一起运行,您可以将游标用于许多查询。但每次坚持使用新光标:
con = psycopg2.connect(**params)
def run_query(query):
with closing(con.cursor()) as cur:
try:
cur.execute(query)
con.commit()
if cur.rowcount > 0:
return cur.fetchall()
else:
return cur.lastrowid
except:
con.rollback()
run_query(SELECT * FROM x_table)