2012-01-16 8 views
0

私のクラスがデータベースをかなり使用している場合(たくさんの関数/プロパティがDBのデータを使用しています)、ベストプラクティスは何ですか?何度も何度も何度もやって、終了時に(グローバル変数を使って)DB接続を閉じます。 (ローカル変数を使用して)すべてのプロパティでDB接続を作成/使用/閉じることができますか?PyQt - クラス破棄時にデータベース接続を閉じる方法

接続を一度開始してクラス破棄した方がよい場合は、どうすればよいですか?

def __del__ (self) 
    self.connection.close() 

は機能しません。

ありがとうございます。

答えて

2

__del__ガベージコレクション中にオブジェクトがそれを参照していないときに、オブジェクトが破棄されるときにのみ関数が呼び出されます。

クラスに明示的なシャットダウンメソッドを実装するときに、クラスがまだ参照しているオブジェクトが表示されているかどうかを確認してください。

__del__メソッドを使用すると、オブジェクトが破壊されていると考えられるため、リソースを解放することは危険です。

Pythonドキュメントからいくつかのオブジェクトは、開いているファイルやウィンドウなどの「外部」リソースへの参照が含まれています。これらのリソースはオブジェクトがガベージコレクトされたときに解放されますが、ガーベジコレクションが行われることは保証されていないので、通常はclose()メソッドである外部リソースを解放する明示的な方法も提供されます。このようなオブジェクトを明示的に閉じるには、プログラムを強くお勧めします。 'try ... finally'ステートメントは、これを行う便利な方法を提供します。

0

他のクラスでもデータベース接続を使用する場合は、dbの作成、dbの接続/終了、dbからの情報の取得などのメソッドを含むクラスを作成し、このクラスを継承できます。

0

メインウィンドウクラスからアクセスできるデータベースクローズリクエスト関数を作成します。

これは、ウィンドウのcloseEvent内でこれを呼び出すことができ、関数の戻り値に応じて異なるアクションをとる可能性があります。

+0

GUIコードを知って、DB上で動作することは悪いソフトウェア設計です。 @EricFortin。 –

+0

どのような方法で、具体的には? – ekhumoro

+0

MVCは広く受け入れられている設計パターンです。私はクローズイベントをフックしても構いませんが、その中のDBに直接アクセスすることはできません。 –

関連する問題