2017-09-25 8 views
0

私はフラスコのアプリケーションで作業していると私はsqliteデータベースを使用する必要があります。これまでは、必要な場所でデータベースに接続して切断しました。問題は、サーバーが継続的な要求を受け取ると、データベースのオープン/クローズのプロセスが非常に不便になることです。フラスコsqliteデータベースを使用して

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

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

と呼び出しget_db().cursor()アクセスデDBへ:

私はそのフラスコを使用して、sqliteのデータベースと連携する独自の方法を持っていました。

しかし、マニュアルに従って:フラスコ内の

あなたは簡単にオンデマンドでデータベース接続 の開口部を実装することができますし、コンテキストが死亡したときに(通常は終了要求の で)それらを閉じます。

アクティブアプリケーションコンテキスト( は、飛行中にリクエストがある場合は常にtrue)または アプリケーションコンテキスト自体を作成する必要があります。この時点で、get_db関数は現在のデータベース接続を取得するために使用される になります。コンテキストが に破壊されると、データベース接続が切断されます。

これは、これはまた、各リクエストで接続を開いたり閉じたりすることを意味しませんか?私はすでにやっていたのと同じです。

何かと混同していますか?

答えて

1

フラスコフックを使用できます。 before_request after_request link

+0

これは文字通り、彼らが望ましくないと言っていることです。また、それらのフックをどのように使うべきかを説明してください。そうでなければ、実際には答えはありません。 – davidism

関連する問題