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,))
我的代码:
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,))