from tkinter import *
import tkinter.messagebox as tm
import sqlite3
import array
import pygame
from pygame import *
import random
pygame.init()
f=pygame.font.SysFont(None,60)
class Login:
def __init__(self):
Label1 = Label(root,text = "Username")
Label2 = Label(root,text = "Password")
self.Entry1 = Entry(root)
self.Entry2 = Entry(root,show = "*")
Label1.grid(row=0)#default column is 0
Label2.grid(row=1)
self.Entry1.grid(row = 0,column = 1)
self.Entry2.grid(row = 1,column = 1)
root.minsize(width = 300,height = 80)
lgbutton = Button(text = "Login",command = self.ButtonClicked)
lgbutton.grid(columnspan = 2)
def ButtonClicked(self):
username = self.Entry1.get()
password = self.Entry2.get()
GetDatabase(username,password)#compares the username and password to the ones stored in the database
def GetDatabase(username,password):
conn=sqlite3.connect('TEST.db')
c=conn.cursor
c.execute("CREATE TABLE IF NOT EXISTS StudentLogin(surname TEXT, username TEXT, password INT);")
c.execute("CREATE TABLE IF NOT EXISTS TeacherLogin(surname TEXT, username TEXT, password INT,class TEXT);")
c.execute('''INSERT INTO StudentLogin (surname,username,password)
VALUES
('Fred', 'Smith',123),
('John', 'Tucker',123),
('Michael', 'Jefford',123),
('Robert', 'Thomas',123);''')
c.execute('''INSERT INTO TeacherLogin(surname,username,password,class)
VALUES('Tucker','HTucker',123,'12C/C1'),
('Cooper','ACooper',142,'12C/Ma1'),
('Smith','KSmith',1223,'12C/Ch1'),
('Elston','FElston',454,'12C/Ch1');''')
StudentUsername=[]
StudentPassword=[]
TeacherUsername=[]
TeacherPassword=[]
c.execute("SELECT * FROM TeacherLogin;")
for column in c:
TeacherUsername.append(column[1])
TeacherPassword.append(column[2])
print(TeacherUsername)
print(TeacherPassword)
c.execute("SELECT * FROM StudentLogin;")
for column in c:
StudentUsername.append(column[1])
StudentPassword.append(column[2])
print(StudentUsername)
print(StudentPassword)
c.execute("DROP TABLE TeacherLogin;")
c.execute("DROP TABLE StudentLogin;")
if username in StudentUsername:
correct=int(StudentUsername.index(username))
if int(password) == StudentPassword[correct]:
#if password in Password :
tm.showinfo("Login info", "Welcome "+username)
root.destroy()
Simulation()
elif username in TeacherUsername:
correct=int(TeacherUsername.index(username))
if int(password)==TeacherPassword[correct]:
tm.showinfo("Login info", "Welcome "+username)
root.destroy()
TeacherLogin()
else:
tm.showerror("Login error", "Incorrect username or password")
conn.commit()
conn.close()
def TeacherLogin()
pass
def StudentLogin():
pass
root=Tk() #creating blank window
root.resizable(width=False,height=False)
root.title("Please login.")
root.minsize(width=300,height=80)
Login()
root.mainloop()
在我已經寫了一些代碼,允許用戶輸入自己的用戶名和密碼,然後將自己的詳細對比,以在數據庫中的那些時刻。它以前工作過,但現在出現的錯誤:如何防止同一個分貝的多個條目?和sqlite3現在不會執行?
AttributeError: 'builtin_function_or_method' object has no attribute 'execute'
它爲什麼現在不執行?
另外,我很新的sqlite3,我想知道如何將值插入數據庫,如果他們不存在,因爲目前它必須刪除表中的值,以阻止他們從每次有人登錄不正確時都會重複添加。因爲我不想讓數據庫充滿相同的值。
我該怎麼做?如果數據已經在數據庫中,那麼將如何檢查數據? –
當你創建一個表時,你可以指定一個字段(列)被限制爲獨特的值,如'CREATE TABLE t1(a,b UNIQUE);'。如果你想要對現有表進行約束,那麼使用SQLite會更棘手。這兩個文件可以在這裏找到。 https://www.techonthenet.com/sqlite/unique.php – 0x11