无法从数据库记录中读取sqlite3 python

这是我第一次使用 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()

        




我尝试使用读取inc.fetchall()的记录,以便程序可以检查用户名是否可用,但它似乎不起作用(至少对我而言)。usernameuserInfo


湖上湖
浏览 128回答 2
2回答

青春有我

fetchall方法返回一个元组列表,无论是一列还是多列。因此,这里的比较if row == username:永远不会成立。如果你想要元组的第一个元素,它是通常的,即row[0].

肥皂起泡泡

返回的记录是元组,因此您需要改用row[0] == username:def dataRead():    username = user.get()    password = pword.get()        c.execute("SELECT username FROM userInfo")    data = c.fetchall()    found = False    for row in data:        if row[0] == username:            found = True            Label(regWin, text = "Sorry, username already in use...\nTry another one.", fg = "red").pack()            print(row)            break    if not found:        dataEntry(username, password)但是,您不需要从数据库中获取所有记录。您可以使用WHERE子句来获取所需的记录:def dataRead():    username = user.get()    password = pword.get()    c.execute('SELECT username FROM userInfo WHERE username = ?', (username,))    data = c.fetchone()    if data:        Label(regWin, text = "Sorry, username already in use...\nTry another one.", fg = "red").pack()        print(data)    else:        dataEntry(username, password)最好使username字段成为一个独特的字段:def createTable():    c.execute("CREATE TABLE IF NOT EXISTS userInfo(username TEXT PRIMARY KEY, password TEXT)")这样表中就没有重复的用户名了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python