如何使用Python使用变量更新mysql记录

问题描述 投票:0回答:1

我有一个包含一些记录的本地 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.")
python mysql mysql-python
1个回答
0
投票

您遇到的错误是由于 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.")
© www.soinside.com 2019 - 2024. All rights reserved.