2

我有一个连接到多个数据库(超过 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)
    
4

1 回答 1

0

普遍的共识似乎是不使用__del__。回顾以前的 答案

  1. 不能假定它会被调用或何时调用。
  2. del关键字不会导致调用 __del__ 。
  3. 它可能会导致垃圾收集无法正常工作(内存泄漏)。
  4. 改用显式方法(手动调用清理函数)或弱引用。

那应该回答您的问题 1、2 和 4。至于 3. 问题:如果您使用的数据库适配器符合 python dbapi2(dbms 适配器的流行形式),那么关闭游标并不意味着应该关闭连接. 因此,即使所有创建的游标都已关闭,连接仍保持打开状态,这是正确的,我会说。

于 2012-05-19T17:45:55.030 回答