亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法從數據庫記錄中讀取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 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號