2012-11-28 39 views
3

我有一個簡單的基於web.py的應用程序使用MySQLdb。我有一個類來處理像這樣的數據庫操作:關閉Python和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() 

像這樣的東西,我會關閉遊標和連接?或者我接近完全錯誤?

回答

3

db.close()連接和cur.close()爲遊標。

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

編輯:

但如果給它一點想法 - 你不會需要關閉遊標。一旦變量被銷燬,Python會關閉遊標,所以當你的類的實例不再存在時 - 遊標將被關閉。

+0

但是我會在課堂上把它放在哪裏? – RHPT

+0

@RHPT:你什麼時候不再需要數據庫連接或光標? –

+0

@RHPT:擴大了答案。 –

3

首先,對類名和變量使用不同的名稱,因爲您已經對類名和連接使用了相同的名稱('db')。

接下來,您需要將conn(在您的問題db第3行中)定義爲self.conn

進口MySQLdb的

類分貝():

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多種功能,以從數據庫中獲得的數據確保您關閉遊標和函數中的連接,這是最後調用的。或者你可能有一個獨立的函數,它關閉了光標和連接。