2015-09-30 23 views
0

У меня есть строка соединения, как показано ниже, и я хочу, чтобы заменить переменные, но не может заставить его работать:Python MySQLDb замещающие строки в MySQL Conn

db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="database") 

Я изменить это использовать переменную:

db = MySQLdb.connect(host="localhost", user="%s", passwd="password", db="database") % "root" 

Ошибка: mysql_exceptions.OperationalError: (1045, "Access denied for user '%s'@'localhost' (using password: YES)")

Таким образом, не заменяя и пытается выполнить запрос с %s. Я также попытался с .format (вместо% s) и получил ту же проблему.

Чтобы обойти это, я собирался подставить строку заранее, а затем добавить в линию связи как один аргумент, однако даже базовая версия этого не работает для меня. Вот пробный запуск, но он терпит неудачу, даже без какого-либо substituation:

variable = '''MySQLdb.connect(host="localhost", user="root", passwd="password", db="database")''' 
db = MySQLdb.connect(variable) 

Это приводит к MySQL пытается передать все переменные в качестве первого аргумента (хост): _mysql_exceptions.OperationalError: (2005, 'Unknown MySQL server host \'host="localhost", user="root", passwd="password", db="database"\' (2)')

+1

Хотя ответ Дэниела, безусловно, правильно, и предпочтительнее, фактическая ошибка, которую вы сделали здесь заключается в следующем: Вы имеете дело с 4 (здесь используются аргументы ключевого слова). Вам нужно будет применить подстановку к отдельной строке для вашего подхода к работе, например: 'MySQLdb.connect (host =" localhost ", user ="% s "%" root ", passwd =" password " , db = "database-% s"% n) ' –

+0

@LukasGraf благодарит за разъяснения. Я подумал об этом, но не пробовал, так как это выглядело как что-то, что могло бы вызвать ошибку fi. У меня был '%" root "' в середине команды. Думаю нет. – derpy

ответ

4

Я думаю, что вы над этим. Это стандартный вызов функции и не имеет ничего общего с MySQLdb. Как и с любым вызовом, если вы хотите использовать переменную, вы просто сделать так:

user = 'root' 
MySQLdb.connect(host="localhost", user=user, passwd="password", db="database")