我有一个包含一些记录的本地 mysql 数据库,我需要创建一个代码来使用 python 更新它们。 我是 python 语言的新手,但我已经对其他语言(如 php 等)有经验。 我正在尝试这种遵循方法,其中有我的主键唯一字段,我应该使用变量来查找和更新正确的记录
当我尝试执行代码时,出现类似“mysql.connector.errors.ProgrammingError:SQL 语句参数不足”的错误
谢谢
这是我的代码:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database="football"
)
mycursor = mydb.cursor()
home = "Chelsea"
away = "Machester City"
resultht = "0-0"
resultft = "1-1"
uniquefield = "Chelsea - Manchester City"
sql = """Update matches SET home = %s, away = %s, resultht = %s, resultft = %s, uniquefield = %s WHERE uniquefield = %s"""
paramtot = (home, away, resultht, resultft, uniquefield)
mycursor.execute(sql, paramtot)
mydb.commit()
print(mycursor.rowcount, "record updated.")
您遇到的错误是由于 SQL 语句中的占位符数量与您在 paramtot 元组中提供的参数数量不匹配造成的。在 SQL 语句中,您有 6 个占位符 (%s),但仅提供 5 个参数。 SQL 语句中多余的 %s 可能会导致错误。
要解决此问题,您应该从 SQL 语句中删除额外的 %s,因为您使用 uniquefield 既作为要更新的值,又作为 WHERE 子句中的过滤条件。
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database="football"
)
mycursor = mydb.cursor()
home = "Chelsea"
away = "Manchester City" # Fixed the typo in the team name
resultht = "0-0"
resultft = "1-1"
uniquefield = "Chelsea - Manchester City"
sql = """UPDATE matches
SET home = %s, away = %s, resultht = %s, resultft = %s
WHERE uniquefield = %s"""
paramtot = (home, away, resultht, resultft, uniquefield)
mycursor.execute(sql, paramtot)
mydb.commit()
print(mycursor.rowcount, "record updated.")