2017-06-12 7 views
0

私はこれが最初のスニペットでflask homepageフラスコアプリでsqlite接続を再オープンするには?

から公式SQLiteのチュートリアルを以下午前:

import sqlite3 
from flask import g 

DATABASE = '/path/to/database.db' 

def get_db(): 
    db = getattr(g, '_database', None) 
    if db is None: 
     db = g._database = sqlite3.connect(DATABASE) 
    return db 

@app.teardown_appcontext 
def close_connection(exception): 
    db = getattr(g, '_database', None) 
    if db is not None: 
     db.close() 

しかし、私はこのコードを使用してデータベースに問い合わせ電話をかける際に二回は2回目の呼び出しに失敗しました:

DB接続は、最初の呼び出しの終わりに閉鎖され、 db is Noneがfalseであるため、その後2回目の呼び出しにリニューアルオープンしていないますので、理にかなって

sqlite3.ProgrammingError: Cannot operate on a closed database.

データベースを再オープンするにはどうすればよいですか?

+0

フラスコのバージョンは何ですか? –

+0

バージョンは0.12.2 – Altoyyr

+0

ありがとうございます。あなたのルートを添付できますか? –

答えて

1

データベースを閉じるときにコンテキストからデータベースを削除すると、次の要求時にデータベースが再度開きます。

import sqlite3 
from flask import g 

DATABASE = '/path/to/database.db' 

def get_db(): 
    db = getattr(g, '_database', None) 
    if db is None: 
     db = g._database = sqlite3.connect(DATABASE) 
    return db 

@app.teardown_appcontext 
def close_connection(exception): 
    db = getattr(g, '_database', None) 
    if db is not None: 
     db.close() 
     g.pop('_database') 
+0

これは正しい解決策のように聞こえますが、少し試してみます – Altoyyr

+0

ありがとう –

関連する問題