【发布时间】:2025-12-20 12:25:12
【问题描述】:
这是我第一次使用 sqlite3 并且我正在使用数据库。我正在制作一个在线井字游戏,这样我就可以和我的朋友一起玩。在def dataRead(): 中,我尝试读取用户从注册窗口输入的数据,并尝试检查数据是否已保存在数据库中。如果是,用户必须输入另一个用户名。
def register():
##initialising sqlite
con = sqlite3.connect("userData.db")
c = con.cursor()
def submit():
#creating tables in the database
def createTable():
c.execute("CREATE TABLE IF NOT EXISTS userInfo(username TEXT, password TEXT)")
def dataRead():
username = user.get()
password = pword.get()
c.execute("SELECT username FROM userInfo")
data = c.fetchall()
try:
for row in data:
if row == username:
Label(regWin, text = "Sorry, username already in use...\nTry another one.", fg = "red").pack()
print(data)
else:
dataEntry(username, password)
except TypeError:
dataEntry(username, password)
def dataEntry(username, password):
c.execute("INSERT INTO userInfo(username, password) VALUES (?, ?)", (username, password))
con.commit()
createTable()
dataRead()
我尝试使用c.fetchall() 读取userInfo 中username 的记录,以便程序可以检查用户名是否可用,但它似乎不起作用(至少对我而言) .
【问题讨论】:
-
“似乎不起作用”是什么意思?它是否返回错误的数据?如果抛出错误,如果是,错误是什么” 函数根本没有被调用?
-
它根本不返回任何东西,也不写入数据库
-
您是否验证了函数是否在您期望它们被调用时被调用?你做了什么来调试这个?
-
您不应该创建多个
Tk实例。如果您需要多个窗口,请创建一次Tk的实例,然后将其他窗口创建为Toplevel的实例。您还应该只拨打一次mainloop。 -
那为什么你的例子中有 tkinter 代码?如果这纯粹是一个 sqlite 问题,请删除所有 tkinter 代码。
标签: python sqlite tkinter tkinter-entry