2017-09-17 15 views
0
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,我想知道如何將值插入數據庫,如果他們不存在,因爲目前它必須刪除表中的值,以阻止他們從每次有人登錄不正確時都會重複添加。因爲我不想讓數據庫充滿相同的值。

回答

1

您需要呼叫光標方法。

# ... 
def GetDatabase(username,password): 
    conn=sqlite3.connect('TEST.db') 
    c=conn.cursor() # Call this one! 
    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) 
#... 
2

我想你想c = conn.cursor()而不是c = conn.cursorGetDatabase

對於重複,當你設計你的表,你可以添加一個UNIQUE約束到列或列的集合。這將自動拒絕來自數據庫的重複項。

+0

我該怎麼做?如果數據已經在數據庫中,那麼將如何檢查數據? –

+0

當你創建一個表時,你可以指定一個字段(列)被限制爲獨特的值,如'CREATE TABLE t1(a,b UNIQUE);'。如果你想要對現有表進行約束,那麼使用SQLite會更棘手。這兩個文件可以在這裏找到。 https://www.techonthenet.com/sqlite/unique.php – 0x11

相關問題