App下載

使用Pymysql進(jìn)行用戶登錄驗(yàn)證

玹三 2021-11-09 15:20:06 瀏覽數(shù) (3151)
反饋

之前學(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 是主鍵,用戶名是唯一的。

image-20211109145318215

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é)果

image-20211109145835069

image-20211109145853920

image-20211109145907523

image-20211109145923493

9、總結(jié)

上述內(nèi)容就是關(guān)于我對(duì)于和數(shù)據(jù)庫結(jié)合的用戶登錄驗(yàn)證的簡單實(shí)現(xiàn)。但此中亦有不完美之處,就是缺少了一部分:如果密碼正確,用戶名不正確,提示用戶名錯(cuò)誤的內(nèi)容。


1 人點(diǎn)贊