我目前在尝试让我的SQLite数据库使用用户在我的tkinter
输入框中输入的值更新其记录时遇到了问题。这是我的代码:
from tkinter import ttk
import sqlite3
from tkinter import *
import mysql.connector
root = Tk()
root.title("Player Statistics DBMS")
root.geometry('700x400')
root.config(bg="light blue")
conn = sqlite3.connect('player_stats.db')
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS player_stats (
first_name text,
points integer,
assists integer,
rebounds integer,
shots_made integer,
shots_missed integer)""")
cur.close()
conn.commit()
conn.close()
first_name = StringVar()
points = IntVar()
assists = IntVar()
rebounds = IntVar()
shots_made = IntVar()
shots_missed = IntVar()
status = StringVar()
player_name = Label(top, text='Player First Name:')
player_name.place(x=290, y=20)
player_name = Entry(top, width=10)
player_name.place(x=300, y=50)
points_label = Label(top, text="Number of Points:")
points_label.place(x=37, y=100)
entry_points = Entry(top, width=10)
entry_points.place(x=45, y=130)
assist_label = Label(top, text="Number of Assists:")
assist_label.place(x=192, y=100)
assist_label = Entry(top, width=10)
assist_label.place(x=207, y=130)
rebound_label = Label(top, text="Number of Rebounds:")
rebound_label.place(x=350, y=100)
rebound_label = Entry(top, width=10)
rebound_label.place(x=369, y=130)
turnovers_label = Label(top, text="Number of Turnovers:")
turnovers_label.place(x=520, y=100)
turnovers_label = Entry(top, width=10)
turnovers_label.place(x=541, y=130)
shots_made_label = Label(top, text="Number of Shots Made:")
shots_made_label.place(x=106, y=200)
shots_made_label = Entry(top, width=10
shots_made_label.place(x=129, y=230)
shots_missed_label = Label(top, text="Number of Shots Missed:")
shots_missed_label.place(x=440, y=200)
shots_missed_label = Entry(top, width=10)
shots_missed_label.place(x=465, y=230)
enter_data_button = Button(top, text="Enter")
enter_data_button.place(x=336, y=280)
def get():
conn = sqlite3.connect('player_stats.db')
cur = conn.cursor()
cur.execute("insert into player_stats values('%s', '%s', '%s', '%s', '%s', '%s')") \
%(first_name.get(), points.get(), assists.get(), rebounds.get(), shots_made.get(), shots_missed.get())
conn.commit()
conn.close()
print(conn.fetchall())
print(status.set("Data Entered Successfully"))
enter_data_button = Button(top, text="Enter", command=get)
enter_data_button.place(x=336, y=280)
因此,每当用户在图形用户界面中输入并单击Enter按钮时,函数get()
将运行,代码将收集用户输入的数据,数据库将更新。完成后,代码将输出Data Entered Succesfully
。但是,当我运行它时,我得到一个错误。这是我的错误跟踪:
TypeError: unsupported operand type(s) for %: 'sqlite3.Cursor' and 'tuple'
提前感谢您的帮助。
1条答案
按热度按时间sulc1iza1#
以下行中
\
之前的)
:应移至声明末尾,如下所示:
但是,使用字符串替换可能会有SQL注入的风险,最好使用占位符: