如果在类中声明,Python无法连接到MySQL

时间:2013-07-18 11:09:35

标签: python mysql

我是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")

请告诉我解决方案的方法并解释为什么我的代码有错误。

谢谢!


EDITED

最后,mata和alecxe帮我解决了这个问题,我不知道选择哪个解决方案。我在这里总结一下有人像我这样的错误: 1.删​​除finally语句。 2.在**

中使用self.connection = mysql.connector.connect(**self.configs)

2 个答案:

答案 0 :(得分:3)

您正在将字典对象self.configs传递到mysql.connector.connect,但根据docs,您应该传递给它userpassword和其他参数。您似乎需要解压缩configs

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

希望是这样。

答案 1 :(得分:3)

即使您更正了alecxe指出的错误,您的代码仍然无效。

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