4

私は OOP を学習しようとしていますMySQLdb。最初のテストとしてデータベース接続を使用しています。これは私がこれまでに持っているものです:

class DBConnection:
    def __init__(self, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME):
        self.host = DB_HOST
        self.port = DB_PORT
        self.name = DB_NAME
        self.user = DB_USER
        self.password = DB_PASSWORD

    def get_conn(self):
        conn = MySQLdb.connect (host = self.DB_HOST, port = self.DB_PORT,
                                db = DB_NAME, user = DB_USER,
                                passwd = DB_PASSWORD)
        return conn

    def get_cursor(self):
        cursor = self.conn.cursor()
        return cursor

    def get_dict_cursor(self):
        dict_cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
        return dict_cursor  

上記は有効ですか?self.connを参照していますか、get_conn()またはこれは無効な参照です。Python シェルを使用して、データベースへの接続を確立し、カーソルを取得するにはどうすればよいですか?

4

1 に答える 1

6

self.connどこにも定義していません。connの中でローカルとして設定しているだけですget_conn。コンストラクターで定義してから、 setself.connに更新します。このような:get_connself.conn

class DBConnection:
    def __init__(self, DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME):
        self.host = DB_HOST
        self.port = DB_PORT
        self.name = DB_NAME
        self.user = DB_USER
        self.password = DB_PASSWORD
        self.conn = None

    def get_conn(self):
        self.conn = MySQLdb.connect(host = self.host,
                                    port = self.port,
                                    db = self.name,
                                    user = self.user,
                                    passwd = self.password)

また、次のようself.connに、 で毎回新しいものを作成するのではなく、最初に が設定されているかどうかを確認しget_connます。

def get_conn(self):
    if self.conn is None:
        self.conn = MySQLdb.connect(host = self.host,
                                    port = self.port,
                                    db = self.name,
                                    user = self.user,
                                    passwd = self.password)
    return self.conn

最後に、次のようにget_connメソッドを呼び出します。

mydbconnobj = DBConnection('localhost',3306,'foouser','foopass','foodbname')
mydbconn = mydbconnobj.get_conn()
于 2012-04-16T22:20:36.373 に答える