【问题标题】:Closing cursor and connection with Python and MySQLdb使用 Python 和 MySQLdb 关闭游标和连接
【发布时间】:2012-11-16 13:36:25
【问题描述】:

我有一个使用 MySQLdb 的简单的基于 web.py 的应用程序。我有一个像这样处理数据库操作的类:

class db():
   def __init__(self):
       db = MySQLdb.connect(host='mysql.server', user='user', passwd='pass', db='app')
       self.cur = db.cursor()

   def get_data(self):
       sql = "SELECT * FROM foobar"
       self.cur.execute(sql)
       rs = self.cur
       r.fetchall()
       return rs

我像 DB = db() 这样实例化类。然后,在另一堂课上,我会参考它。

class bleh()
   def blarg():
      DB.get_data()

有了这样的东西,我会在哪里关闭光标和连接?还是我完全错了?

【问题讨论】:

    标签: python python-2.7 mysql-python


    【解决方案1】:

    首先对类名和变量使用不同的名称,因为您对类名和连接也使用了相同的名称('db')。

    接下来,您需要将 conn(在您的问题 db 第 3 行中)定义为 self.conn

    导入 MySQL 数据库

    类 db():

    def __init__(self):
        self.conn = MySQLdb.connect(host='mysql.server', user='user', passwd='pass', db='app')
        self.cur = self.conn.cursor()
    
    def get_data(self):
        sql = "SELECT * FROM test"
        self.cur.execute(sql)
        rs = self.cur
        rs.fetchall()
        return rs
    
    class bleh()
        def blarg():
            data = DB.get_data()
            DB.cur.close()
            DB.conn.close()
    

    注意:如果您在 bleh 类中有多个函数从数据库中获取数据,请确保在函数中关闭游标和连接,这是最后调用的。或者你可能有一个单独的函数,它关闭光标和连接。

    【讨论】:

      【解决方案2】:

      db.close() 用于连接,cur.close() 用于光标。

      http://mysql-python.sourceforge.net/MySQLdb.html

      编辑:

      但如果考虑一下 - 你不需要关闭光标。一旦变量被销毁,Python 会关闭游标,因此当您的类的实例不再存在时 -- 游标将被关闭。

      【讨论】:

      • 但是我会把它放在课堂上的什么地方呢?
      • @RHPT:什么时候不再需要数据库连接或游标?
      • @RHPT:扩大答案。
      • 我对这个问题添加了更多解释。希望它会更好地清除它。
      • @RHPT:如果需要新连接,请销毁数据库,对同一连接使用相同的光标。
      猜你喜欢
      • 2014-09-25
      • 2011-08-05
      • 2015-03-08
      • 2014-01-01
      • 2012-08-09
      • 2015-10-01
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多