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()是一种更好的使用方式__del__(反之亦然)?

4

1 回答 1

4

无法保证何时__del__实际调用(或者在循环引用的情况下是否完全调用)。 with closing(...) as ...:保证每次退出with子句时都会调用清理代码。

于 2012-05-26T16:26:53.350 回答