Je suis un débutant

Je veux empêcher les noms d'utilisateur en double chaque fois que les gens s'inscrivent.

Voici mon code coupé:

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!")

Mais chaque fois que je l'exécute, bien que le nom d'utilisateur ait été enregistré dans la base de données, il ne montre que la boîte de message et l'erreur créées avec succès:

ValueError: impossible de traiter les paramètres.

N'importe qui peut m'aider à résoudre ce problème?

6
Eve11 15 mars 2019 à 11:11

2 réponses

Meilleure réponse

Je crois que la source du problème est dans la ligne

user_query = (username_info)

Ça devrait être

user_query = (username_info,)

La virgule de fin est la différence syntaxique entre une expression entre parenthèses et un tuple.

Un autre problème avec le code est la requête:

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

Ce qui devrait être:

find_user = ("SELECT * FROM useraccess WHERE user_type = %s")
10
jcbsv 15 mars 2019 à 09:21

Avez-vous vérifié ces variables,

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

Sont-ils dans des formats disponibles? (c'est-à-dire pouvez-vous mettre directement le nom d'utilisateur.get () dans user_type?)

Je ne connais pas cette façon de passer un paramètre

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

Avez-vous revérifié cela? (pourquoi pas la méthode% s?)

Aussi, vous obtenez probablement le "Compte créé!" car mycursor.fetchall () échoue.

0
Zr.Ms. Bruinvis 15 mars 2019 à 09:24