python - Python 的 MySQL.Connector 不会更新值
问题描述
我正在尝试做的事情:
我想运行这个功能
updaterScoren = "UPDATE bois SET pinkode_brugt = pinkode_brugt + 1, score = %s WHERE id = %s" %(score, f)
像这样
if (i != app.timerValue):
score = i
print(score, i)
print("Dette er dit resultat: {}".format('%.2f' %score))
print(myresult)
mycursor.execute(updaterScoren)
这样游戏的分数就会保存在对象“myresult”选择的行中。同时,应该保存密码使用情况(游戏使用了多少次)。
我收到以下消息:
1.480000000000001 1.480000000000001
Dette er dit resultat: 1.48
[(3, '(ADRESS)', '(NAME)', None, 0)]
观察。(ADRESS) 和 (NAME) 是替身,因为我不想透露实际地址或姓名。
我的整个代码:
import threading
import tkinter as tk
import pip
import time
import mysql.connector
from time import sleep
# NY THREAD(s), der kan vise scoreboarden på en skærm.
class Timer(threading.Thread):
def _init_(self):
threading.Thread._init_(self)
self.label = 0
global score
def run(self) -> None:
self.master = tk.Tk()
self.master.gemoetry("+0+0")
self.master = tk.Label(self.root, bg = "black", fg = "red")
self.timer.grid(row = 1, column = 2)
self.master.mainloop()
class Tkinter(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.daemon = True
self.root = 0
self.entry = 0
self.label = 0
self.button = 0
self.timerValue = 0
self.stopButton = 0
self.start()
def run(self) -> 0:
self.root = tk.Tk()
# tkinter code goes here
self.root.geometry("+2+0")
self.root.config(background="black")
self.label = tk.Label(self.root, bg="white", fg="black", font=("Fixedsys", 28))
self.entry = tk.Entry(self.root, bg="white", fg="black", font=("Fixedsys", 28))
self.stopTiden = tk.Button(self.root, bg="red", fg="white", text="Stop Spillet", command=self.stopTid)
self.startTiden = tk.Button(self.root, bg="green", fg="white", text="Start Spillet", command=self.startTid)
self.timerDisplay = tk.Label(self.root, bg="black", fg="red", text="Ceci n'est pas une timer")
self.timerDisplay.grid(row=2, column=50)
self.startTiden.grid(row=0, column=1)
self.stopTiden.grid(row=0, column=10)
self.entry.grid(row=1, column=1)
self.label.grid(row=1, column=10)
self.root.bind("<KeyPress>", self.read)
self.root.mainloop()
def displayTime(self):
self.timerDisplay.config(text=i)
def read(self, event):
key = event.keysym
try:
if key == "Return":
self.getA()
self.visTid()
except:
self.fejlTidvalg()
def startTid(self):
self.stopButton = 0
def getA(self):
self.timerValue = float(self.entry.get().format("%.2f", 1.23456))
print(self.timerValue)
return self.timerValue
def stopTid(self):
self.stopButton = 1
def visTid(self):
self.label.config(text="Det her er timerens slutværdi: {}".format(self.timerValue))
def fejlTidvalg(self):
self.label.config(text="FEJL -Vælg Venligst Et Tal")
app = Tkinter()
stopTiden = 0
# Login til databasen
mydb = mysql.connector.connect(
host="",
user="",
password="",
database='mydatabase',
auth_plugin='mysql_native_password'
)
doorButton = 0
while (doorButton != 1):
stopButton = app.stopButton
timerValue = app.timerValue
iTwo = timerValue
doorButton = 0
i = 0.00
mycursor = mydb.cursor()
def countdown(i):
while i:
mins, secs = divmod(t, 60)
timer = '{:02d}:{:02d}'.format(mins, secs)
print(timer, end="\r")
time.sleep(1)
t -= 1
# Servodøren skal åbnes her i denne kode
while (app.stopButton != 1):
score = 0
# Indtast Pinkoden
f = int(input(
"Kodeord - bemærk her, at kodeordene er pinkoderne fra min egen database, bare indtast en værdi mellem 1-6"))
mycursor.execute("SELECT id,adresse,name,pinkode_brugt,score FROM bois WHERE id=%s", (f,))
# MySQL Commands
updaterScoren = "UPDATE bois SET pinkode_brugt = pinkode_brugt +1, score = %s WHERE id = %s" %(score, f)
myresult = mycursor.fetchall()
row_count = mycursor.rowcount
print(myresult)
print("number of affected rows: {}".format(row_count))
if row_count == 1:
print(row_count)
print(app.timerValue)
while (i != app.timerValue) and (i <= app.timerValue) and (doorButton != 1) and (app.stopButton != 1):
print('%.2f' % i)
i = i + 0.01
timeLeft = app.timerValue - i
iTwo = app.timerValue
print("THIS IS X", app.timerValue)
time.sleep(0.01)
# Hvis spillet stoppes, or i ikke når timerens slutværdi, vil scoren gemmes
if (i != app.timerValue):
score = i
print(score, i)
print("Dette er dit resultat: {}".format('%.2f' %score))
print(myresult)
mycursor.execute(updaterScoren)
else:
print("Ingen point")
mycursor.execute(updaterScoren)
i = 0
mydb.commit()
# Her skal du tilføje i til den ID's row, der lige har åbnet via sin pinkode. Så er du stort set færdig! :D
解决方案
此命令是一个简单的字符串连接
updaterScoren = "UPDATE bois SET pinkode_brugt = pinkode_brugt +1, score = %s WHERE id = %s" %(score, f)
当您首先声明它时,您没有分数,因此它将是空的。
当你把它移到
if (i != app.timerValue):
score = i
print(score, i)
print("Dette er dit resultat: {}".format('%.2f' %score))
print(myresult)
updaterScoren = "UPDATE bois SET pinkode_brugt = pinkode_brugt +1, score = %s WHERE id = %s" %(score, f)
mycursor.execute(updaterScoren)
您将在其中获得实际想要的分数。
要做到这一点,你需要尝试。你需要准备好的陈述
mycursor = mydb.cursor(prepared=True)
...
updaterScoren = "UPDATE bois SET pinkode_brugt = pinkode_brugt +1, score = %s WHERE id = %s"
...
mycursor.execute(updaterScoren , (score, f))
当然,您需要正确的数据才能影响行。
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html
推荐阅读
- rust - RUST 编译错误:期望 `::` 而得到 `{`
- swift - Ints 的 Swift 除法解释为 Doubles 的除法
- reactjs - 如何在 React.js 中关闭 Bootstrap 5 模式?
- javascript - Node.js 没有捕捉到这个模块的错误
- php - Laravel 表单提交只能与 livewire 中的提交按钮一起使用
- dockerfile - 镜像构建后容器中的数据挂载可见,但其中没有数据
- sql - 如何聚合来自动态表查询的查询结果
- google-sheets - 将单元格与其他单元格进行比较并返回差异
- python - 3D CNN 中的 Input_shape
- c# - 手榴弹在错误的位置生成