Flask自动重新连接PostgreSQL

时间:2016-12-13 12:30:54

标签: python postgresql flask

我有一个连接到远程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")

我遇到的问题是,在几分钟不活动后,连接关闭,我必须重新启动应用程序。我添加了一个异常控件来捕获该错误并重新连接,但我仍然收到游标已经关闭的错误。

自动重新连接的正确方法是什么?

1 个答案:

答案 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)