2013-10-12 5 views
1

Привет, ребята, я сейчас работаю в проекте python в своей школе. Сначала я хочу пояснить, что я не программист на языке python (я был просто призван погасить пламя в этом проекте, потому что никто другой не будет, и я был достаточно храбр, чтобы сказать «да»).Baffling python mysql connection issue

У меня есть следующая проблема здесь. Мне нужно написать метод, который соединяется с существующей базой данных localhost MySQL (я использую коннектор версии 1.0.12 и python 2.6), а затем делаю довольно простые вещи. Параметры отправляются графическим интерфейсом GTK (я не писал этот интерфейс). Поэтому я написал свой метод, как это:

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, который кодирует другой парень, отлично работает), и они являются действительными параметрами входа. Если я жестко задаю параметры входа непосредственно в графический интерфейс, все идет нормально, и функции выполняются должным образом; следующий код выполняет приятный и гладкий:

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, поэтому любая помощь будет высоко оценена.

Заранее спасибо.

+1

Исправьте ваш первый отступ. –

+0

В вашем первом блоке кода у вас есть порядок параметров функции как «пользователь, база данных, пароль». Однако порядок использования выглядит как «пользователь, пароль, база данных». Вы уверены, что когда вы вызываете функцию, вы делаете '('root', 'TESTERS', 'PK17LP12r',, ....)'? –

+0

Кроме того, рекомендуем не публиковать свой фактический пароль на общедоступном веб-сайте в будущем (если это действительно так). –

ответ

0

Разница между двумя версиями заключается не в том, что вы жестко кодируете параметры во втором, а в том, что вы вызываете ключевые слова args, а не позиционные. Документы для соединителя MySQL, кажется, не дают фактический позиционный порядок, и нет никаких оснований думать, что они в порядке, вы дали, так что похоже, вы всегда должны позвонить по kwarg:

cnxOMC = mysql.connector.connect(user=user, password=password,host=host,database=database)