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') を使用したため、クラス名と変数に異なる名前を使用します。

db次に、conn (質問の 3 行目) を として定義する必要がありますself.conn

MySQLdb のインポート

クラス 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 に複数の関数がある場合は、最後に呼び出される関数でカーソルと接続を閉じていることを確認してください。または、カーソルと接続を閉じる別の関数がある場合があります。

于 2012-12-01T08:08:08.713 に答える