Skip to main content
 首页 » 编程设计

python之ValueError:无法处理 Python/MySQL 中的参数

2024年08月14日23findumars

我想防止人们在注册时使用重复的用户名。

这是我的代码片段:

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

但是每次运行,虽然用户名已经在db中注册了,但是却只显示创建成功的messagebox和error:

ValueError: Could not process parameters.

谁能帮我解决这个问题?

请您参考如下方法:

我认为问题的根源在于线路

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