Python MySQL Connector запрос базы данных с %s не удается
У меня есть базовая программа, которая должна запрашивать базу данных, содержащую информацию о пользователе. Я пытаюсь выбрать информацию для конкретного пользователя и распечатать ее на консоли.
Вот мой код:
import mysql.connector
funcon = mysql.connector.connect(user='root', password='pass', host='127.0.0.1', database='fundata')
funcursor = funcon.cursor()
query = ("SELECT * FROM funtable WHERE userName=%s")
uName = 'user1'
funcursor.execute(query, uName)
for (userName) in funcursor:
print("{}".format(userName))
У меня имя пользователя хранится в переменной, потому что позже я планирую получить имя пользователя из поля ввода tkinter. При выполнении этого кода я получаю следующую ошибку:
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1
Я пытался поставить %s в кавычки в запросе, но тогда это буквально ищет имя пользователя "%s " и ничего не возвращает. Как я могу изменить свой код, чтобы я мог запрашивать базу данных только для этого пользователя?
Спасибо.
К вашему сведению: я использую python 3.3.
1 ответ:
Измените ваш
funcursor.execute(query, uName)
вызов на:funcursor.execute(query, (uName, ))
Второй аргумент в
execute
принимает список/кортеж строк, а не строку. Приведенный выше вызов создает кортеж перед передачей строки вexecute
, поэтому ошибка не возникает.Причина, по которой
execute
принимает список/кортеж строк, заключается в том, что он заранее не знает, сколько строк ему нужно, чтобы удовлетворить ваш запрос.