4

我有一个使用 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()

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

4

2 回答 2

3

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

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

编辑:

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

于 2012-11-28T16:19:44.153 回答
3

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

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

导入 MySQL 数据库

类数据库():

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 类中有多个函数从数据库中获取数据,请确保在函数中关闭游标和连接,这是最后调用的。或者你可能有一个单独的函数,它关闭光标和连接。

于 2012-12-01T08:08:08.713 回答