2

SQLAlchemy を使用して MySQL に接続し、次のようなものを書くのにうんざりしています。

with closing(engine) as connection:
    do_sql_stuff(connection)

このパターンは私のコードの多くの領域で繰り返されており、__del__これが利用可能であることは必要ではないようです。接続の作成と終了をラップするクラスを実装するだけではどうですか。

class MyConnectionManager(object):
    def __init__(self, db_uri):
        self.__db_engine = sqlalchemy.create_engine(db_uri)
        self.__db_conn = self.__db_engine.connect()

    def __del__(self):
        self.__db_conn.close()

with closing()これは単に2つの異なるスタイル/設定ですか、それとも使用する方が良い方法であるというより重要な理由があります__del__か(またはその逆)?

4

1 に答える 1

4

が実際にいつ呼び出されるかについての保証はありません__del__(または、循環参照の場合にまったく呼び出されるかどうか)。 句with closing(...) as ...:を終了するたびにクリーンアップ コードが呼び出されることを保証します。with

于 2012-05-26T16:26:53.350 に答える