Anonymous
Wie kann ich ValueError beheben: Parameter sind in SQLite nicht unterstützt?
Post
by Anonymous » 20 Aug 2025, 13:55
Ich habe ValueError in SQL. Ich habe einen Einfügenbefehl zum Einfügen von Score in die Datenbank, aber er ändert sich nicht: Es ist immer null. Tatsächlich hashedscore = self.score < /code>, aber der Befehl iM.execute < /code> funktioniert nicht. /> (?) ", (HashedScore)) ValueError: Parameter sind nicht unterstütztes Typ < /p>
< /blockquote>
Code: Select all
import sqlite3 as sql
from tkinter import *
import hashlib
import tkinter as tk
from random import randint
from PIL import Image, ImageTk
import random
db = sql.connect("usersDataBase")
im = db.cursor()
def exit():
window.destroy()
window = Tk()
window.title("Game Launcher")
window.geometry("900x900")
window.resizable(False,False)
title = Label(text = "Login Screen", font=('helvetica'))
title.place(relx=.4, rely=.15)
t ='CREATE TABLE IF NOT EXISTS userss5 (username VARCHAR (32), password VARCHAR(32), scores VARCHAR(32), userID INTEGER PRIMARY KEY AUTOINCREMENT )'
im.execute(t)
db.commit()
def insertToDb(username, password):
hashedUsername = username.encode("UTF-8")
hashedPassword = hashlib.md5(password.encode("UTF-8")).hexdigest()
im.execute("INSERT INTO userss5 (username, password ) VALUES (?,?)",(hashedUsername,hashedPassword))
db.commit()
resultStr.set("Account created.")
def newAccountPage():
global resultStr
title.destroy()
title2 = Label(text="Register Screen", font=('helvetica'))
title2.place(relx=.4, rely=.15)
newUser = Frame(window)
newUser.place(relwidth=0.9, relheight=0.9,relx=0., rely=0.3)
usernameLabel = Label(newUser, text="Username :", font=('helvetica'))
usernameEntry = Entry(newUser, width=30, font=('helvetica'))
usernameLabel.place(relx=.25, rely=.05)
usernameEntry.place(relx=.42, rely=.05)
passwordLabel = Label(newUser, text="Password :", font=('helvetica'))
passwordEntry = Entry(newUser, width=30, show="*", font=('helvetica'))
passwordLabel.place(relx=.25, rely=.15)
passwordEntry.place(relx=.42, rely=.15)
resultStr = StringVar()
result = Label(newUser, textvariable=resultStr,font=('helvetica'))
result.place(relx= .45, rely=.7)
register = Button(newUser, text="Register", bg="green", fg="white",font=('helvetica'),command=lambda: insertToDb(usernameEntry.get(), passwordEntry.get()))
register.place(relx=.42, rely=.25)
exitButton = Button(newUser, text="Exit", bg="red", command=exit, font=('helvetica'))
exitButton.place(relx=.60, rely=.45)
back = Button(newUser, text="Back", bg="red", fg="white", command=lambda:[newUser.place_forget(),title2.destroy()],font=('helvetica'))
back.place(relx=.84,rely=.25)
def auth(username, password):
resultLogin = StringVar()
resultLabel = Label(homePage, textvariable= resultLogin)
resultLabel.place(relx=.45,rely=.7)
im.execute("SELECT COUNT (*) FROM userss5")
count = im.fetchall()
if count[0][0] == 0:
resultLogin.set("User not found")
return
else:
matchUser = False
matchPassword = False
userID = 0
hashedPassword = hashlib.md5(password.encode("UTF-8")).hexdigest()
hashedUsername = username.encode("UTF-8")
im.execute("SELECT * FROM userss5 WHERE username = ?",(hashedUsername,))
query = im.fetchone()
try:
length = len(query)
except:
length= 0
if length > 0:
matchUser = True
idnum = query[2]
if query[1] == hashedPassword:
matchPassword = True
resultLogin.set("Login successful")
loginOther(idnum)
else:
resultLogin.set("Wrong password or username.")
else:
resultLogin.set("Wrong password or username.")
def loginOther(userID):
homePage.place_forget()
userID = Frame(window)
menu = Menu(userID)
madde = Menu(menu, tearoff= False)
snakeGameButton = Button(userID, text="Snake Game", bg="green",command=lambda :[snakeGame(),snakeGameButton.destroy(),ticTacToeGameButton.destroy(),userInfoLabel.destroy()],font=('helvetica'))
snakeGameButton.place(relx=.12, rely=.25)
ticTacToeGameButton = Button(userID, text="Tic Tac Toe", bg="blue", command=lambda:[ticTacToe(),snakeGameButton.destroy(),ticTacToeGameButton.destroy(),userInfoLabel.destroy()],font=('helvetica'))
ticTacToeGameButton.place(relx=.70, rely=.25)
userID.place(relwidth=.9,relheight=.9,relx=.05,rely=.03)
userInfoLabel = Label(userID, text="Welcome to launcher.Please choose game",font=('helvetica'))
userInfoLabel.place(relx=.25, rely=.1)
exitButton = Button(userID, text="Exit", bg="red", command=exit, font=('helvetica', 20)).place(x=350, y=700)
def snakeGame():
MOVE_INCREMENT = 20
MOVES_PER_SECOND = 15
GAME_SPEED = 1500 // MOVES_PER_SECOND
class Snake(tk.Canvas):
def __init__(self):
super().__init__(
width=600, height=620, background="black", highlightthickness=0
)
self.snake_positions = [(100, 100), (80, 100), (60, 100)]
self.food_position = self.set_new_food_position()
self.direction = "Right"
self.score = 0
self.load_assets()
self.create_objects()
self.bind_all("", self.on_key_press)
self.pack()
self.after(GAME_SPEED, self.perform_actions)
def load_assets(self):
try:
self.snake_body_image = Image.open("./assets/snake.png")
self.snake_body = ImageTk.PhotoImage(self.snake_body_image)
self.food_image = Image.open("./assets/food.png")
self.food = ImageTk.PhotoImage(self.food_image)
except IOError as error:
window.destroy()
raise
def create_objects(self):
self.create_text(35, 12, text=f"Score: {self.score}", tag="score", fill="#fff", font=10)
self.create_text(530,12, text=f"Last Score: ", fill="#fff", font=10 )
for x_position, y_position in self.snake_positions:
self.create_image(
x_position, y_position, image=self.snake_body, tag="snake"
)
self.create_image(*self.food_position, image=self.food, tag="food")
self.create_rectangle(7, 27, 593, 613, outline="#525d69")
def check_collisions(self):
head_x_position, head_y_position = self.snake_positions[0]
return (
head_x_position in (0, 600)
or head_y_position in (20, 620)
or (head_x_position, head_y_position) in self.snake_positions[1:]
)
def check_food_collision(self):
if self.snake_positions[0] == self.food_position:
self.score += 1
self.snake_positions.append(self.snake_positions[-1])
self.create_image(
*self.snake_positions[-1], image=self.snake_body, tag="snake"
)
self.food_position = self.set_new_food_position()
self.coords(self.find_withtag("food"), *self.food_position)
score = self.find_withtag("score")
self.itemconfigure(score, text=f"Score: {self.score}", tag="score")
def end_game(self):
self.delete(tk.ALL)
self.create_text(
self.winfo_width() / 2,
self.winfo_height() / 2,
text=f"Game over! You scored {self.score}!",
fill="#fff",
font=14
)
self.scoreSave()
def move_snake(self):
head_x_position, head_y_position = self.snake_positions[0]
if self.direction == "Left":
new_head_position = (head_x_position - MOVE_INCREMENT, head_y_position)
elif self.direction == "Right":
new_head_position = (head_x_position + MOVE_INCREMENT, head_y_position)
elif self.direction == "Down":
new_head_position = (head_x_position, head_y_position + MOVE_INCREMENT)
elif self.direction == "Up":
new_head_position = (head_x_position, head_y_position - MOVE_INCREMENT)
self.snake_positions = [new_head_position] + self.snake_positions[:-1]
for segment, position in zip(self.find_withtag("snake"), self.snake_positions):
self.coords(segment, position)
def on_key_press(self, e):
new_direction = e.keysym
all_directions = ("Up", "Down", "Left", "Right")
opposites = ({"Up", "Down"}, {"Left", "Right"})
if (
new_direction in all_directions
and {new_direction, self.direction} not in opposites
):
self.direction = new_direction
def perform_actions(self):
if self.check_collisions():
self.end_game()
self.check_food_collision()
self.move_snake()
self.after(GAME_SPEED, self.perform_actions)
def set_new_food_position(self):
while True:
x_position = randint(1, 29) * MOVE_INCREMENT
y_position = randint(3, 30) * MOVE_INCREMENT
food_position = (x_position, y_position)
if food_position not in self.snake_positions:
return food_position
def scoreSave(self):
hashedScore = self.score
im.execute("INSERT INTO userss5 (scores) VALUES (?)", (hashedScore))
frame = Frame(window)
frame.pack()
board = Snake()
homePage = Frame(window)
homePage.place(relwidth=0.9, relheight=0.9,relx=0., rely=0.3)
usernameLabel = Label(homePage, text="Username :", font=('helvetica'))
usernameEntry = Entry(homePage, width= 30, font=('helvetica'))
usernameLabel.place(relx=.25 , rely=.05 )
usernameEntry.place(relx=.42 , rely=.05 )
passwordLabel = Label(homePage, text="Password :" ,font=('helvetica'))
passwordEntry = Entry(homePage, width= 30,show="*",font=('helvetica'))
passwordLabel.place(relx=.25 , rely=.15)
passwordEntry.place(relx=.42 , rely=.15)
login = Button(homePage, text= "Login", fg="blue", font=('helvetica'),command=lambda: auth(usernameEntry.get(),passwordEntry.get()))
login.place(relx=.46, rely=.25)
register = Button(homePage, text= "Register", fg="green", command=newAccountPage, font=('helvetica'))
register.place(relx=.45, rely=.35)
exitButton = Button(homePage, text="Exit", bg="red", command=exit, font=('helvetica'))
exitButton.place(relx=.45, rely=.45)
window.mainloop()
1755690915
Anonymous
Ich habe ValueError in SQL. Ich habe einen Einfügenbefehl zum Einfügen von Score in die Datenbank, aber er ändert sich nicht: Es ist immer null. Tatsächlich hashedscore = self.score < /code>, aber der Befehl iM.execute < /code> funktioniert nicht. /> (?) ", (HashedScore)) ValueError: Parameter sind nicht unterstütztes Typ < /p> < /blockquote> [code]import sqlite3 as sql from tkinter import * import hashlib import tkinter as tk from random import randint from PIL import Image, ImageTk import random db = sql.connect("usersDataBase") im = db.cursor() def exit(): window.destroy() window = Tk() window.title("Game Launcher") window.geometry("900x900") window.resizable(False,False) title = Label(text = "Login Screen", font=('helvetica')) title.place(relx=.4, rely=.15) t ='CREATE TABLE IF NOT EXISTS userss5 (username VARCHAR (32), password VARCHAR(32), scores VARCHAR(32), userID INTEGER PRIMARY KEY AUTOINCREMENT )' im.execute(t) db.commit() def insertToDb(username, password): hashedUsername = username.encode("UTF-8") hashedPassword = hashlib.md5(password.encode("UTF-8")).hexdigest() im.execute("INSERT INTO userss5 (username, password ) VALUES (?,?)",(hashedUsername,hashedPassword)) db.commit() resultStr.set("Account created.") def newAccountPage(): global resultStr title.destroy() title2 = Label(text="Register Screen", font=('helvetica')) title2.place(relx=.4, rely=.15) newUser = Frame(window) newUser.place(relwidth=0.9, relheight=0.9,relx=0., rely=0.3) usernameLabel = Label(newUser, text="Username :", font=('helvetica')) usernameEntry = Entry(newUser, width=30, font=('helvetica')) usernameLabel.place(relx=.25, rely=.05) usernameEntry.place(relx=.42, rely=.05) passwordLabel = Label(newUser, text="Password :", font=('helvetica')) passwordEntry = Entry(newUser, width=30, show="*", font=('helvetica')) passwordLabel.place(relx=.25, rely=.15) passwordEntry.place(relx=.42, rely=.15) resultStr = StringVar() result = Label(newUser, textvariable=resultStr,font=('helvetica')) result.place(relx= .45, rely=.7) register = Button(newUser, text="Register", bg="green", fg="white",font=('helvetica'),command=lambda: insertToDb(usernameEntry.get(), passwordEntry.get())) register.place(relx=.42, rely=.25) exitButton = Button(newUser, text="Exit", bg="red", command=exit, font=('helvetica')) exitButton.place(relx=.60, rely=.45) back = Button(newUser, text="Back", bg="red", fg="white", command=lambda:[newUser.place_forget(),title2.destroy()],font=('helvetica')) back.place(relx=.84,rely=.25) def auth(username, password): resultLogin = StringVar() resultLabel = Label(homePage, textvariable= resultLogin) resultLabel.place(relx=.45,rely=.7) im.execute("SELECT COUNT (*) FROM userss5") count = im.fetchall() if count[0][0] == 0: resultLogin.set("User not found") return else: matchUser = False matchPassword = False userID = 0 hashedPassword = hashlib.md5(password.encode("UTF-8")).hexdigest() hashedUsername = username.encode("UTF-8") im.execute("SELECT * FROM userss5 WHERE username = ?",(hashedUsername,)) query = im.fetchone() try: length = len(query) except: length= 0 if length > 0: matchUser = True idnum = query[2] if query[1] == hashedPassword: matchPassword = True resultLogin.set("Login successful") loginOther(idnum) else: resultLogin.set("Wrong password or username.") else: resultLogin.set("Wrong password or username.") def loginOther(userID): homePage.place_forget() userID = Frame(window) menu = Menu(userID) madde = Menu(menu, tearoff= False) snakeGameButton = Button(userID, text="Snake Game", bg="green",command=lambda :[snakeGame(),snakeGameButton.destroy(),ticTacToeGameButton.destroy(),userInfoLabel.destroy()],font=('helvetica')) snakeGameButton.place(relx=.12, rely=.25) ticTacToeGameButton = Button(userID, text="Tic Tac Toe", bg="blue", command=lambda:[ticTacToe(),snakeGameButton.destroy(),ticTacToeGameButton.destroy(),userInfoLabel.destroy()],font=('helvetica')) ticTacToeGameButton.place(relx=.70, rely=.25) userID.place(relwidth=.9,relheight=.9,relx=.05,rely=.03) userInfoLabel = Label(userID, text="Welcome to launcher.Please choose game",font=('helvetica')) userInfoLabel.place(relx=.25, rely=.1) exitButton = Button(userID, text="Exit", bg="red", command=exit, font=('helvetica', 20)).place(x=350, y=700) def snakeGame(): MOVE_INCREMENT = 20 MOVES_PER_SECOND = 15 GAME_SPEED = 1500 // MOVES_PER_SECOND class Snake(tk.Canvas): def __init__(self): super().__init__( width=600, height=620, background="black", highlightthickness=0 ) self.snake_positions = [(100, 100), (80, 100), (60, 100)] self.food_position = self.set_new_food_position() self.direction = "Right" self.score = 0 self.load_assets() self.create_objects() self.bind_all("", self.on_key_press) self.pack() self.after(GAME_SPEED, self.perform_actions) def load_assets(self): try: self.snake_body_image = Image.open("./assets/snake.png") self.snake_body = ImageTk.PhotoImage(self.snake_body_image) self.food_image = Image.open("./assets/food.png") self.food = ImageTk.PhotoImage(self.food_image) except IOError as error: window.destroy() raise def create_objects(self): self.create_text(35, 12, text=f"Score: {self.score}", tag="score", fill="#fff", font=10) self.create_text(530,12, text=f"Last Score: ", fill="#fff", font=10 ) for x_position, y_position in self.snake_positions: self.create_image( x_position, y_position, image=self.snake_body, tag="snake" ) self.create_image(*self.food_position, image=self.food, tag="food") self.create_rectangle(7, 27, 593, 613, outline="#525d69") def check_collisions(self): head_x_position, head_y_position = self.snake_positions[0] return ( head_x_position in (0, 600) or head_y_position in (20, 620) or (head_x_position, head_y_position) in self.snake_positions[1:] ) def check_food_collision(self): if self.snake_positions[0] == self.food_position: self.score += 1 self.snake_positions.append(self.snake_positions[-1]) self.create_image( *self.snake_positions[-1], image=self.snake_body, tag="snake" ) self.food_position = self.set_new_food_position() self.coords(self.find_withtag("food"), *self.food_position) score = self.find_withtag("score") self.itemconfigure(score, text=f"Score: {self.score}", tag="score") def end_game(self): self.delete(tk.ALL) self.create_text( self.winfo_width() / 2, self.winfo_height() / 2, text=f"Game over! You scored {self.score}!", fill="#fff", font=14 ) self.scoreSave() def move_snake(self): head_x_position, head_y_position = self.snake_positions[0] if self.direction == "Left": new_head_position = (head_x_position - MOVE_INCREMENT, head_y_position) elif self.direction == "Right": new_head_position = (head_x_position + MOVE_INCREMENT, head_y_position) elif self.direction == "Down": new_head_position = (head_x_position, head_y_position + MOVE_INCREMENT) elif self.direction == "Up": new_head_position = (head_x_position, head_y_position - MOVE_INCREMENT) self.snake_positions = [new_head_position] + self.snake_positions[:-1] for segment, position in zip(self.find_withtag("snake"), self.snake_positions): self.coords(segment, position) def on_key_press(self, e): new_direction = e.keysym all_directions = ("Up", "Down", "Left", "Right") opposites = ({"Up", "Down"}, {"Left", "Right"}) if ( new_direction in all_directions and {new_direction, self.direction} not in opposites ): self.direction = new_direction def perform_actions(self): if self.check_collisions(): self.end_game() self.check_food_collision() self.move_snake() self.after(GAME_SPEED, self.perform_actions) def set_new_food_position(self): while True: x_position = randint(1, 29) * MOVE_INCREMENT y_position = randint(3, 30) * MOVE_INCREMENT food_position = (x_position, y_position) if food_position not in self.snake_positions: return food_position def scoreSave(self): hashedScore = self.score im.execute("INSERT INTO userss5 (scores) VALUES (?)", (hashedScore)) frame = Frame(window) frame.pack() board = Snake() homePage = Frame(window) homePage.place(relwidth=0.9, relheight=0.9,relx=0., rely=0.3) usernameLabel = Label(homePage, text="Username :", font=('helvetica')) usernameEntry = Entry(homePage, width= 30, font=('helvetica')) usernameLabel.place(relx=.25 , rely=.05 ) usernameEntry.place(relx=.42 , rely=.05 ) passwordLabel = Label(homePage, text="Password :" ,font=('helvetica')) passwordEntry = Entry(homePage, width= 30,show="*",font=('helvetica')) passwordLabel.place(relx=.25 , rely=.15) passwordEntry.place(relx=.42 , rely=.15) login = Button(homePage, text= "Login", fg="blue", font=('helvetica'),command=lambda: auth(usernameEntry.get(),passwordEntry.get())) login.place(relx=.46, rely=.25) register = Button(homePage, text= "Register", fg="green", command=newAccountPage, font=('helvetica')) register.place(relx=.45, rely=.35) exitButton = Button(homePage, text="Exit", bg="red", command=exit, font=('helvetica')) exitButton.place(relx=.45, rely=.45) window.mainloop() [/code]