【问题标题】:Why is my Python MySQL update code not working?为什么我的 Python MySQL 更新代码不起作用?
【发布时间】:2021-12-03 19:12:25
【问题描述】:

我正在尝试制作一个表单,我的用户可以在其中更新他们的登录用户名(信息在 MySQL 数据库中),但是当我运行代码并输入测试值时出现此错误:

Error Dui to : 1064 (42000): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '%s WHERE client_ID = '0001'' 附近使用正确的语法

我迫切需要帮助。这是代码

old_uname = StringVar()
new_name = StringVar()

def update_uname():
    if old_uname.get()==" " or new_name.get()==" ":
        messagebox.showerror("Error" , "All Fields Are Required" , parent = wintask)
    else:
        try:
            con = mysql.connector.connect(host="<>", user="<>", password="<>",database="<>")
            cur = con.cursor()
            update_command = "UPDATE login_information SET username = %s WHERE client_ID = '0001'"
            val = (new_name.get())
            cur.execute(update_command, val)
            con.commit()
            messagebox.showinfo("Success", "Username has been updated!", parent=wintask)

        except Exception as es:
            messagebox.showerror("Error" , f"Error Dui to : {str(es)}", parent = wintask)

PS:我的 SQL 连接没有问题。我对编码还很陌生

【问题讨论】:

    标签: mysql python-3.x mysql-python


    【解决方案1】:

    我参考了文档https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html

    我认为以下内容与您相关:

    tupledictionary 参数中的参数绑定到操作中的变量。

    然后是注释:

    在 Python 中,包含单个值的元组必须包含逗号。例如,('abc') 被评估为标量,而 ('abc',) 被评估为元组。

    您的代码:

    new_name = StringVar()
    ....
    val = (new_name.get())
    cur.execute(update_command, val)
    

    所以参数params是一个字符串:

    >>> a="test"
    >>> (a)
    'test'
    >>> b=(a)
    >>> type(b)
    <class 'str'>
    >>> c=(a,)
    >>> type(c)
    <class 'tuple'>
    

    让你试试cur.execute(update_command, (val,)) # the comma after val

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2017-09-19
      • 2014-01-23
      • 2013-08-06
      • 2014-04-10
      • 1970-01-01
      相关资源
      最近更新 更多