【问题标题】:SQLite3 reading Usernames&Passwords from databaseSQLite3 从数据库中读取用户名和密码
【发布时间】:2016-03-08 18:57:45
【问题描述】:

我正在尝试使用数据库从中读取有效登录信息。一列是用户名,另一列是密码。我如何编写我的代码,以便 IF 来自用户的用户名条目和来自用户的密码条目匹配数据库中的一行,它将验证登录并进入下一页示例称为“屏幕”

我在下面创建了一个演示登录页面,其中我添加了一个创建数据库功能。我必须编辑/添加什么来满足我的目标。

from tkinter import * #imports all the GUI libraries
from tkinter import messagebox #so it can be used outside idle
from tkinter import ttk
import sqlite3

class LoginPopup():
    #constructor sets up the buttons
    def __init__(Top):
        Top.GenericGui = Tk()#creating a window
        Top.GenericGui.title('Login')
        Top.GenericGui.geometry('300x200+250+30')
        Top.Check = 1
        Top.GenericGui.iconbitmap('home.ico')
        Password = StringVar()
        Username = StringVar()
        conn = sqlite3.connect('Logins.db')
        c = conn.cursor()

    #takes you back to the main menu
    def BackToMain():
        Top.delete()
        openscreen = Screen()


    def create_table():
        c.execute("CREATE TABLE IF NOT EXISTS stuffToPlot(Username TEXT, Password TEXT)")

    def read_from_db():
        c.execute('SELECT * FROM stuffToPlot')
        data = c.fetchone()
        for row in data:
            print(row)

    def UsernameAndPassword(Top):
        UsernameAttempt = Username.get()#how to get value from entry box
        PasswordAttempt = Password.get()#how to get value from entry box

    #Login Components
    LoginVerify = ttk.Button(Top.GenericGui, text="Login", command = lambda: UsernameAndPassword(Top)).place(x=220,y=170)
    ttk.Entry(Top.GenericGui,textvariable = Username,width = 20).place(x=140,y=60)
    ttk.Entry(Top.GenericGui,show = '*',textvariable = Password,width = 20).place(x=140,y=100)#can hide letters entered with *
    ttk.Label(Top.GenericGui,text = 'Username:').place(x=40,y=60)
    ttk.Label(Top.GenericGui,text = 'Password:').place(x=40,y=100)
    Label(Top.GenericGui,text = '  Please Enter Your Username \nand Password ',font = ('TkDefaultFont',12)).pack(side = TOP, fill = X)


    create_table()    
    read_from_db()
    c.close
    conn.close()

class Screen(LoginPopup):

    #constructor sets up the buttons
    def __init__(Top):
        Top.GenericGui = Tk()#creating a window
        Top.GenericGui.title('Screen')
        Top.GenericGui.geometry('300x200+250+30')
        Top.Check = 1
        Top.GenericGui.iconbitmap('home.ico')
        Password = StringVar()
        Username = StringVar()

runprogram = LoginPopup()

感谢您抽出宝贵时间阅读,我们将不胜感激

【问题讨论】:

    标签: python database tkinter sqlite


    【解决方案1】:

    编写一个通用 SQL 查询来获取所有匹配的行:

    sql = "SELECT * FROM StuffToPlot WHERE Username = ? and Password = ?"
    

    然后执行查询,填写用户名和密码的具体值:

    c.execute(sql, (UsernameAttempt, PasswordAttempt))
    

    如果您从该查询中没有得到任何结果,则说明用户名和/或密码不匹配。

    如果你只得到一个结果,那么它们匹配。

    如果您得到多个结果,则说明出现了严重错误。

    【讨论】:

    • @JohnGordon感谢您的帮助,我如何将其集成到“如果”语句中,基本上是说如果用户输入的用户名和密码与数据库中的一行匹配,它将进入下一个屏幕else 函数将包括我向他们显示错误消息框
    • @Ross 我对Tk不熟悉,所以不知道如何让它进行下一步。
    猜你喜欢
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多