mysql.connector.errors.ProgrammingError: 1210 - whenever I do a 2-digit query - works fine with 1 digits

mysql.connector.errors.ProgrammingError: 1210 - whenever I do a 2-digit query - works fine with 1 digits

我的代码:

import threading
import tkinter as tk
import pip
import time
import mysql.connector
from time import sleep
global score
global countdown

en = 1
score = 0
countdown = 1
print("Hiya!")

mydb = mysql.connector.connect(
    host="",
    user="",
    password="",
    database='',
    auth_plugin='mysql_native_password'
)

mycursor = mydb.cursor(prepared=True)
#MYSQL Commands!

#Læser en af de 3 værdier fra MYSQL-databasen
def læsVærdi(command):
    mycursor.execute(command)
    råVærdi = mycursor.fetchone()
    værdi = float("{}".format('%.2f' % råVærdi))
    return værdi

#De Tre læs-MySQL-værdi-commands
læsTidMål = "SELECT tidMål FROM bois WHERE id = 1" #Læser Timerens Slutmål
læsTidScoreNu = "SELECT tidSCoreNu FROM bois WHERE id = 1"
læsStopKnap = "SELECT stopKnap FROM bois WHERE id = 1" #Læser hvilket stadie knappen er i (start/stop)



#Opdaterer en af de 2 værdier fra MYSQL-databasen
def opdaterVærdi(command,id,nyeVærdi):
    nyeVærdi = float(nyeVærdi)
    mycursor.execute(command,(nyeVærdi,id))
    mydb.commit()

#De To opdater-MySQL-værdi-commands
opdaterTidScoreNu = "UPDATE bois SET tidScoreNu = %s WHERE id = %s"
opdaterSlutScore = "UPDATE bois SET score = %s WHERE id = %s"


#Tjekker om pinkoden matcher, returnerer 1 hvis den gør, returnerer 0, hvis ikke.
def pinkodeTester(pinkode):
    pinkode = str(pinkode)
    mycursor.execute("select id,adresse,name,pinkode_brugt,score FROM bois where id= %s",(pinkode))
    myresult = mycursor.fetchall() #Henter alle rows, hvor id = pinkoden
    row_count = mycursor.rowcount #Tjekker hvor mange, der er
    print(row_count)

    if pinkode == 1:
        print("da id 1 bliver brug til at gemme tiden, kan den desværre ikke bruges")
    elif row_count == 1:
        return(1)
    elif row_count != 1:
        return(0)

def timer(id):  # id er den bruger, der skal have gemt sin score på sig,tælder op mod tidsmålet og returnerer scoren til sidst
    f = pinkodeTester(id)
    if f == 1:
        tidsMål = læsVærdi(læsTidMål)
        stopKnap = læsVærdi(læsStopKnap)
        i = 0
        while (i != tidsMål) and (i <= tidsMål) and (stopKnap != 0): #mangler en function, der læser fra arduinoen og ser, om der er blevet trykket på knappen
            i = float(i + 0.01)
            tidsMål = læsVærdi(læsTidMål)
            stopKnap = læsVærdi(læsStopKnap)
            score = str("{}".format('%.2f' % i))  # Omdanner i til en string, der har 2 decimaler, så den kan bruges i kommanden
            opdaterVærdi(opdaterTidScoreNu, 1, i)  # Gemmer score's værdi på databasen - admin portalen (og timeren) bruger dette til at tælde ned
            time.sleep(0.01)
        if (i != tidsMål):  # hvis spillet stoppes, sendes scoren tilbage or funktionen stoppes
            return (score)
        else:  # Ellers, returneres scoren også
            return (score)



a = pinkodeTester(10)
print(a)

问题出在 pinnodeTester 函数上。

我有 10 行 ID 从 1 到 10,其中 1 用于永久存储。

每当我使用 pinnodeTester(2-9) 时,它都可以正常工作,但恰好在 10 时它不起作用。我试过其他 2 位数的值,它 returns 相同的错误消息。

完整错误信息:

Traceback (most recent call last):
  File "C:/Users/Mandem/Downloads/Test-uden-admin-i-servo (1).py", line 87, in <module>
    a = pinkodeTester(10)
  File "C:/Users/Mandem/Downloads/Test-uden-admin-i-servo (1).py", line 55, in pinkodeTester
    mycursor.execute("select id,adresse,name,pinkode_brugt,score FROM bois where id= %s",(pinkode))
  File "C:\Users\Mandem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\mysql\connector\cursor.py", line 1208, in execute
    raise errors.ProgrammingError(
mysql.connector.errors.ProgrammingError: 1210: Incorrect number of arguments executing prepared statement

prepared语句当然是

"SELECT id,addresse,name,pinkode_brugt,score FROM bois WHERE id = %s"

现在有没有可能,出于某些原因,它将两位数解释为两个单个字符?或者类似的东西?如果不是,我根本想不出如果它使用单个数字查询会出现什么问题。

请为单值元组使用正确的格式:

mycursor.execute("select id,adresse,name,pinkode_brugt,score FROM bois where id= %s",(pinkode,))