之前學(xué)習(xí)過的用戶登錄驗(yàn)證,全都是在程序中完成的,并沒有和數(shù)據(jù)庫發(fā)生任何的接觸。最近在學(xué)習(xí)數(shù)據(jù)庫sql語言,突發(fā)奇想結(jié)合數(shù)據(jù)庫完成用戶登錄驗(yàn)證。具體實(shí)現(xiàn)思路和過程如下:
1、首先在數(shù)據(jù)庫中創(chuàng)建一張用戶相關(guān)信息的表,主要的是用戶名和密碼。這里面 id 是主鍵,用戶名是唯一的。
2、導(dǎo)入pymysql庫,并創(chuàng)建數(shù)據(jù)庫連接和游標(biāo)。
import pymysql
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
database='db_game'
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
3、編寫sql。由于這里用戶名是唯一的,所以我只需要檢索用戶名相應(yīng)的那一條信息,然后將密碼進(jìn)行對(duì)比,一樣就可以成功登陸了。
sql = '''
SELECT * FROM tbl_user WHERE username=%s
'''
4、獲取用戶輸入的用戶名和密碼。
username = input('請(qǐng)輸入用戶名:')
password = input('請(qǐng)輸入密碼:')
5、執(zhí)行sql語句,獲取數(shù)據(jù)庫表中的信息。由于用戶名唯一,所以一定只有一條信息,因此使用了fetchone()獲取信息。
cursor.execute(sql, username)
a = cursor.fetchone()
6、做判斷。如果返回的結(jié)果集為空,說明輸入的用戶名不存在于數(shù)據(jù)表中。如果存在,進(jìn)行對(duì)比密碼,對(duì)比不成功就是密碼錯(cuò)誤;對(duì)比成功,就可以成功登錄。
if a is None:
print("用戶不存在!")
elif a['password'] != password:
print("密碼錯(cuò)誤!")
else:
print("成功登錄!")
7、最后不要忘記了關(guān)閉游標(biāo)和數(shù)據(jù)庫。
cursor.close()
conn.close()
8、運(yùn)行結(jié)果
9、總結(jié)
上述內(nèi)容就是關(guān)于我對(duì)于和數(shù)據(jù)庫結(jié)合的用戶登錄驗(yàn)證的簡(jiǎn)單實(shí)現(xiàn)。但此中亦有不完美之處,就是缺少了一部分:如果密碼正確,用戶名不正確,提示用戶名錯(cuò)誤的內(nèi)容。