2016-12-13 29 views
0

私はリモートPostgreSQLデータベース(Amazon RDS上)に接続するFlaskアプリケーションを持っています。ここで私は、データベースへの接続方法の例です:Flaskの自動再接続PostgreSQL

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

エラーは既に処理されています。 'execute()'行を 'except'ブロックの最後にコピーするだけです。そして、結果を保存して処理します。 –

答えて

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) 
関連する問題