我有一个简单的基于web.py的应用程序,它使用MySQLdb。我有一个类来处理数据库操作,如下所示:
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()
有了这样的东西,我会在哪里关闭光标和连接?还是我接近这个完全错误的?
答案 0 :(得分:3)
db.close()
用于连接,cur.close()
用于游标。
http://mysql-python.sourceforge.net/MySQLdb.html
编辑:
但如果考虑一下 - 你就不需要关闭光标了。一旦变量被销毁,Python就会关闭游标,所以当你的类的实例不再存在时 - 游标将被关闭。
答案 1 :(得分:3)
首先为类名和变量使用不同的名称,因为您对类名和连接使用了相同的名称('db')。
接下来,您需要将conn(在您的问题db
第3行中)定义为self.conn
。
导入MySQLdb
class 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中有多个函数从数据库中获取数据,请确保在函数中关闭游标和连接,这在最后调用。或者你可能有一个单独的功能,它关闭光标和连接。