2016-03-22 8 views
1

私はpybottleをWebフレームワークとして、datasetをデータベースハンドラとして単純なREST APIを作成しました。私は、データセットがデータベースへの接続をどのように処理(オープンとクローズ)し、どのくらいこれを気にする必要があるのだろうかと思います。Webアプリケーション内のPythonデータセット

次のことを考えてみましょう:私は(別のファイル内にある)は、Webアプリケーションからsome_function()を呼び出すとき

db = dataset.connect('sqlite:///database.db') 
table = db['table'] 

def some_function(): 
    # do some manipulation (eg. insert) in 'table' 

何が起こりますか?関数の実行後、データセットはデータベースへの接続を適切に開いて閉じますか?あるいは、私はすべての関数呼び出しで新しいオープンな接続を持っていますか?

答えて

1

PythonのすべてのSQLドライバは、Python DB API PEP0249に従います。 私が見ている限り、SQLite用のドライバを使用しているので、同じルールに従ってください。

SQLAlchemyには、永続的な接続を確立し、接続が切断されないようにする組み込みの方法があります。 Databaseオブジェクトを返すメソッドget_connection()を作成するか、アクティブなものがない場合は接続を再構築します。

connectdocumentationおよびsource codeを確認して、ライブラリがデータベースとの通信をどのようにラップするかを確認してください。

+0

ありがとうございます!しかし、私は上記のコードスニペットがうまくいくかどうかを明確に理解していませんでした。複数のユーザがWebアプリケーションで 'some_function()'を同時に呼び出すとどうなりますか?あるデータベース操作がもう一方の操作が完了するまで待つか?書き込み操作後に接続を自動的に閉じますか?コードスニペットで何かを変更する必要がありますか? – wildthing

+0

@wildthing 'some_function'はコード内で接続を開きません。これはモジュールレベルで行われます(関数外)。 SQLAlchemyは、接続がすでに存在しているかどうかをチェックし、trueの場合は現在の接続を使用し、それ以外の場合は新しい接続を確立します。すべての操作で同じ接続が使用されますが、手動で開く/閉じることはお勧めできません。接続はそのまま維持されます。接続の処理方法については、SQLAlchemyのドキュメントを参照してください。 – tuned

関連する問題