ValueError: Не удалось обработать параметры в Python / MySQL - PullRequest
1 голос
/ 15 марта 2019

Я новичок

Я хочу предотвратить дублирование имен пользователей при каждой регистрации.

Вот мой код:

def submit(self):
    username_info = username.get()
    username_password = password.get()

    #connect to db
    db = mysql.connector.connect(host = 'localhost', user = 'root', password = '', database = 'user')

    #create a cursor
    mycursor = db.cursor()
    #insert to db
    sql = ("INSERT INTO useraccess (user_type, password) VALUES (%s, %s)")

    query = (username_info, username_password)
    mycursor.execute(sql, query)
    #commit
    db.commit()

    #create a messagebox
    messagebox.showinfo("Registration", "Successfully Register")

    #if username has been used
    find_user = ("SELECT * FROM useraccess WHERE user_type = ?")
    user_query = (username_info)

    mycursor.execute(find_user, user_query)
    #if (username == username_info):
    if mycursor.fetchall():
        messagebox.showerror("Registration", "The username chosen is already used. Please select another username")
    else:
        messagebox.showinfo("Registration", "Account Created!")

Но каждый раз, когда я запускаю его, хотя имя пользователя было зарегистрировано в БД, на нем отображаются только успешно созданные сообщения и ошибка:

ValueError: Не удалось обработать параметры.

Кто-нибудь может помочь мне решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 15 марта 2019

Я считаю, что источником проблемы является строка

user_query = (username_info)

Это должно быть

user_query = (username_info,)

Конечная запятая - это синтаксическая разница между выражением в скобках и tuple .

Другая проблема с кодом связана с запросом:

find_user = ("SELECT * FROM useraccess WHERE user_type = ?")

, который должен быть:

find_user = ("SELECT * FROM useraccess WHERE user_type = %s")
0 голосов
/ 15 марта 2019

Вы проверили эти переменные,

username_info = username.get()
username_password = password.get()

они в доступных форматах?(то есть вы можете напрямую поместить username.get () в user_type?)

Я не знаком с этим способом передачи параметра

find_user = ("SELECT * FROM useraccess WHERE user_type = ?")

Вы дважды это проверили?(почему не метод% s?)

Кроме того, вы, вероятно, получите "Аккаунт создан!"потому что mycursor.fetchall () не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...