关闭django mysql连接

时间:2012-05-18 15:31:47

标签: python mysql django

我有一个连接到多个数据库(超过400个)的django应用程序。数据库凭据经常更改。我不能使用django数据库支持,因为它需要静态设置。

所以我在加载返回游标的页面时创建了动态数据库连接。

我有以下问题:

  • 这是一种释放游标的合适方法(使用析构函数 __ del _
  • 如果我直接使用close()方法,我的析构函数是否安全
  • 我应该为连接对象做类似的事情,或者只关闭光标就足够了?
  • 是否有任何建议的标准解决方案?

    class MyDatabaseManager(object):
        def __init__(self, database_name):
            self.cursor = None
            #for safety in case next command return an exception
            self.cursor = some_object.get_cursor(database_name)
    
        def close(self):
            self.cursor.close()
            self.cursor = None
    
        def __del__(self):
            if not (self.cursor is None):
                self.close()
    
        def execute_query(self, sql_query, parameter_list):
            return self.cursor.execute(sql_query, parameter_list)
    

1 个答案:

答案 0 :(得分:0)

普遍的共识似乎是不使用 __ del __ 。要回顾previous answers

  1. 不能假设永远被召唤或何时召唤。
  2. del 关键字不会导致调用__del__。
  3. 可能导致垃圾收集无法正常工作(内存泄漏)。
  4. 使用显式方法(手动调用清理函数)或弱引用。
  5. 这应该回答你的问题1,2和4.关于3.问题:如果你使用的数据库适配器符合python dbapi2(dbms适配器的主要形式),那么关闭游标会并不意味着应该关闭连接。因此,即使所有创建的游标都已关闭,连接也会保持开放和正确,我会说。