使用的SQLAlchemy連接到MySQL和我已經得到厭倦了寫這樣的事情:DB連接:與關閉()VS __del__
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__
(或反之亦然)?
問問自己:爲什麼當他們已經有del時加上'with'?然後,查看[文檔](http://docs.python.org/reference/datamodel.html#object.__del__)並查看是否有任何提示,例如帶有單詞「Note」的巨大灰色框,以黑體字表示,或者更好的是,用黑體字表示一個巨大的*紅色*(OK,粉紅色)框,其中帶有「警告」一詞。 – kindall
@kindall - 謝謝,我已經閱讀了文檔,希望從社區獲得更多關於實踐中正在做什麼的信息。 –
@ kindall - 並推論你的第一點,如果'__del__'被破壞了,他們爲什麼不刪除它? –