1

私はPythonの初心者です。Python を使用して MySQL サーバーに接続しようとしています。MySQLの公式ページのガイドのようなものを書きましたが、OKでした。しかし、コネクタ クラスを作成すると、「MySQL 接続が利用できません」というエラーが発生しました。

これが私のクラスです

import mysql.connector
from mysql.connector import errorcode

##  BEGIN MySQL Connector Class
class MySQLConnector :
    configs = {
        "user":"root",
        "password":"",
        "host":"127.0.0.1",
        "database":"python_db",
        "raise_on_warnings": True
    }
    cursor = None
    connection = None

    ##  BEGIN Constructor
    def __init__(self, configs = {}) :
        if(any(configs)!=False) :
            self.configs = configs
    ##  END Constructor

    ##  BEGIN Open
    def open(self) :
        try:
            self.connection = mysql.connector.connect(self.configs)
        except mysql.connector.Error as err:
            if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
                print("Something is wrong with your user name or password")
            elif err.errno == errorcode.ER_BAD_DB_ERROR:
                print("Database does not exists")
            else:
                print(err)
        finally:
            self.connection.close()
        return self.connection
    ##  END Open

    ##  BEGIN close connection
    def close(self) :
        self.cursor.close()
        self.connection.close()
    ##  END close connection

    ##  BEGIN execute
    def execute(self, query) :
        if(self.connection == None) :
            print("Connection is None")
            return
        self.cursor = self.connection.cursor()
        if(self.cursor!=None) :
            self.cursor.execute(query)
        else:
            print("Cursor is 'None'")
    ##  END execute



##  END MySQL Connector Class

##  BEGIN RUN
objConnect = MySQLConnector()
objConnect.open()
objConnect.execute("SELECT * FROM User")

解決方法を教えてください。コードにエラーがある理由を説明してください。

ありがとう!


編集済み

最後に、mata と alecxe はこの問題を解決するのに役立ちます。どの解決策を選択すればよいかわかりません。私のような間違いを犯した人のために、ここで要約します。 1. finally ステートメントを削除します。2.**での使用self.connection = mysql.connector.connect(**self.configs)

4

2 に答える 2

3

alecxe が指摘したエラーを修正しても、コードは機能しません。

finallyブロックは、例外があったかどうかに関係なく、返される前に各接続が閉じられることを保証するため、メソッドopenは閉じられた接続のみを返します。

于 2013-07-18T11:28:06.453 に答える