1

大家好,我目前正在我学校的一个 python 项目中工作。首先,我想明确说明我不是 Python 程序员(我只是被要求扑灭这个项目的火焰,因为没有其他人愿意,而且我很勇敢地答应了)。

我在这里有以下问题。我必须编写一个连接到现有 localhost MySQL 数据库的方法(我使用的是连接器版本 1.0.12 和 python 2.6),然后做一些非常基本的事情。参数由 GTK 编写的 GUI 发送(我没有编写那个界面)。所以我这样写了我的方法:

def compMySQL(self, user, database, password, db_level, table_level, column_level):
    sql_page_textview = self.mainTree.get_widget('sql_text_view')
    sql_page_textview.modify_font(pango.FontDescription("courier 10"))
    sql_page_buffer = sql_page_textview.get_buffer()

    #Gonna try connecting to DB
    try:
        print("Calling conn with U:{0} P:{1} DB:{2}".format(user,password,database))
        cnxOMC = mysql.connector.connect(user, password,'localhost',database)
    except:
        print "Error: Database connection failed. User name or Database name may be wrong"
        return

    #More code ...

但是当我运行我的代码时,我得到了这个:

Calling conn with U:root P:PK17LP12r DB:TESTERS
Error: Database connection failed. User name or Database name may be wrong 

而且我不知道为什么,因为发送的参数与打印的参数相同(告诉我其他人编写的 GUI 工作正常)并且它们是有效的登录参数。如果我直接对登录参数进行硬编码以使用 GUI 一切正常并且功能正常执行;以下代码运行良好且流畅:

def compMySQL(self, user, database, password, db_level, table_level, column_level):
    sql_page_textview = self.mainTree.get_widget('sql_text_view')
    sql_page_textview.modify_font(pango.FontDescription("courier 10"))
    sql_page_buffer = sql_page_textview.get_buffer()

    #Gonna try hardcoding
    try:
        #print("Calling conn with U:{0} P:{1} DB:{2}".format(user,password,database))
        cnxOMC = mysql.connector.connect(user="root", password='PK17LP12r', host='localhost', database='TESTERS')
        print 'No prob with conn'
    except:
        print "Error: Database connection failed. User name or Database name may be wrong"
        return

    #more code ... 

控制台输出:

No prob with conn 

有什么想法吗?这个要死我了。我只是在学习 Python,但我认为这个问题对于经验丰富的 Python 开发人员来说非常容易,因此我们将不胜感激。

提前致谢。

4

1 回答 1

0

两个版本之间的区别不在于您在第二个版本中对参数进行硬编码,而是您通过关键字 args 而不是位置参数进行调用。MySQL 连接器的文档似乎没有给出实际的位置顺序,并且没有理由认为它们是你给出的顺序,所以看起来你应该总是通过 kwarg 调用:

cnxOMC = mysql.connector.connect(user=user, password=password,host=host,database=database)
于 2013-10-12T16:46:49.860 回答