1

我是 Python 的新手。我正在尝试使用 Python 连接 MySQL 服务器。我从 MySQL 官方页面上写了类似的指南,还可以。但是,当我创建一个连接器类时,它引发了错误“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

您正在将字典对象传递给self.configsmysql.connector.connect但是,根据docs,您应该传递给它userpassword以及其他参数。看起来你需要解包configs

self.connection = mysql.connector.connect(**self.configs)

希望这就是它。

于 2013-07-18T11:11:33.987 回答
3

即使您更正了 alecxe 指出的错误,您的代码仍然无法正常工作。

finally块确保每个连接在返回之前都是关闭的,无论是否有异常,因此该open方法只返回关闭的连接。

于 2013-07-18T11:28:06.453 回答