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 5

1 ответ:

Измените ваш funcursor.execute(query, uName) вызов на:

funcursor.execute(query, (uName, ))

Второй аргумент в execute принимает список/кортеж строк, а не строку. Приведенный выше вызов создает кортеж перед передачей строки в execute, поэтому ошибка не возникает.

Причина, по которой execute принимает список/кортеж строк, заключается в том, что он заранее не знает, сколько строк ему нужно, чтобы удовлетворить ваш запрос.