ValueError:无法在Python / MySQL中处理参数

时间:2019-03-15 08:11:53

标签: python parameters valueerror

我是新手

我想防止每次注册时重复的用户名。

这是我的代码片段:

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 个答案:

答案 0 :(得分:3)

我相信问题的根源所在

reports = DeviationReport.objects(**kwargs)
reports = reports.filter((Q(date__gte=start) & Q(date__lte=end)))

应该是

user_query = (username_info)

结尾逗号是括号中的表达式和tuple之间的语法差异。

代码的另一个问题是查询:

user_query = (username_info,)

应该是:

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

答案 1 :(得分:0)

您是否检查了这些变量,

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

它们是否为可处理格式? (即您可以直接将username.get()放入user_type吗?)

我对这种传递参数的方式不熟悉

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

您是否仔细检查过这个? (为什么不是%s方法?)

另外,您可能会得到“帐户已创建!”因为mycursor.fetchall()失败。