Запрос базы данных 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 принимает список / кортеж строк, потому что он не знает заранее, сколько строк ему нужно для того, чтобы удовлетворить ваш запрос.

Другие вопросы по тегам