Python MySQL 更新查询
Posted
技术标签:
【中文标题】Python MySQL 更新查询【英文标题】:Python MySQL Update Query 【发布时间】:2021-01-04 23:47:01 【问题描述】:我正在尝试根据用户输入更新 SQL 表我有以下代码。用户可以选择输入/更改以下默认为 SQL 表中的值的字段。但是,当我运行代码时,我收到以下错误消息
mysql.connector.errors.ProgrammingError: SQL 语句的参数不足
我数了很多次,似乎 %s 与传递的参数匹配。我错过了什么吗?
user = User_name_body.get('1.0',END)
passw = Password_text.get('1.0',END)
first = First_name.get('1.0',END)
last = Last_name.get('1.0',END)
phone = Phone_number.get('1.0',END)
email = Email_address.get('1.0',END)
mycursor = mydb.cursor()
sql = "UPDATE t_users SET Email_address=%s, First_name=%s, Last_name=%s, Phone_Number=%s, Password=%s WHERE User_Name=%s VALUES(%s,%s,%s,%s,%s,%s)"
val = (email, first, last, phone, passw,user)
mycursor.execute(sql, val)
mydb.commit()
mydb.close()
【问题讨论】:
当我尝试删除 VALUES(%s,%s,%s,%s,%s,%s) 代码能够执行但数据库没有更新 【参考方案1】:UPDATE 不带 VALUES,您应该将您的 sql 查询行更改为如下所示:
sql = "UPDATE t_users SET Email_address=%s, First_name=%s, Last_name=%s, Phone_Number=%s, Password=%s WHERE User_Name=%s"
Python 会抛出一个错误,因为您要求 12 个参数并且只提供 6 个。
【讨论】:
我删除了 VALUES(%s,%s,%s,%s,%s,%s) 并且代码运行但没有用更改更新 SQL 表。这是因为只有一个值可能不同,即只有电子邮件更改? 确保用户与数据库中的用户实际对应。另外,添加print(mycursor.rowcount, "record(s) affected")
并确保它实际上影响了一行。
由于某种原因,当我将 .get 用于 tkinter 时,它们是每个变量后的一个空格键字符,因此在删除它后它没有更新,现在查询可以工作了,谢谢您的帮助【参考方案2】:
像这样准备你的 sql 数据:
sql = """ UPDATE t_users SET Email_address=%s, First_name=%s, Last_name=%s, Phone_Number=%s, Password=%s WHERE User_Name = %s """
val = (email, first, last, phone, passw, user)
mycursor.execute(sql, val)
或者你可以这样做
sql = "UPDATE btms_users SET btms_users.user='%s', btms_users.secret='%s' , btms_users.first_name='%s', " \
"btms_users.second_name='%s', btms_users.email='%s', btms_users.mobile='%s' " \
"WHERE btms_users.id='%s'" % (user_name, user_secret, user_firstname, user_lastname,
user_email, user_phone, user_id)
mycursor.execute(sql)
这是一个完整的工作示例:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="test",
database="test"
)
mycursor = mydb.cursor()
sql = "UPDATE items SET name = %s WHERE id = %s"
val = ("Test", 1)
mycursor.execute(sql, val)
mydb.commit()
print(mycursor.rowcount, "record(s) affected")
【讨论】:
我删除了 VALUES(%s,%s,%s,%s,%s,%s) 并且代码运行但没有用更改更新 SQL 表。这是因为只有一个值可能不同,即只有电子邮件更改? 我为你添加了一个完整的工作示例,我自己尝试过。 您的第二个示例在 SQL 字符串中的所有值都被替换为 %,上面写满了“SQL 注入攻击”。第一个例子很好。 由于某种原因,当我将 .get 用于 tkinter 时,它们是每个变量后的一个空格键字符,因此在删除它后它没有更新,现在查询可以工作了,谢谢您的帮助以上是关于Python MySQL 更新查询的主要内容,如果未能解决你的问题,请参考以下文章