数据库连接:使用closing()vs __del__

时间:2012-05-26 16:19:32

标签: python mysql sqlalchemy

使用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__更好的方法(反之亦然)?

1 个答案:

答案 0 :(得分:4)

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