首页 > 解决方案 > 无法从数据库记录中读取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()
        



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

标签: pythonsqlitetkintertkinter-entry

解决方案


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


推荐阅读