2012-11-28 2 views
3

MySQLdb를 사용하는 간단한 web.py 기반 앱이 있습니다.커서 및 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() 

커서를 사용하면 커서와 연결을 어디에서 닫을 수 있습니까? 아니면 내가 완전히이 문제에 접근하고 있습니까? 연결 용으로는 cur.close()

답변

3

db.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에 여러 기능이있는 경우를 닫는 커서 마지막에 불려가는 기능으로의 접속. 또는 커서와 연결을 닫는 별도의 기능이있을 수 있습니다.