使用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__
更好的方法(反之亦然)?
答案 0 :(得分:4)
无法保证实际调用__del__
的时间(或者在循环引用的情况下是否完全调用它)。 with closing(...) as ...:
保证在退出with
子句时调用清理代码。