为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2023-06-06 16:13:33
这是我第一次使用 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
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

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



查看完整回答
反对 回复 2023-06-06
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

返回的记录是元组,因此您需要改用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)")

这样表中就没有重复的用户名了。


查看完整回答
反对 回复 2023-06-06
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信