python實現用戶登陸(sqlite數據庫存儲用戶信息)
目錄
創建數據庫 數據庫管理 簡單登陸
有些地方還未完善。
創建數據庫
import sqlite3
#建一個數據庫
def create_sql():
sql = sqlite3.connect("user_data.db")
sql.execute("""create table if not exists
%s(
%s integer primary key autoincrement,
%s varchar(128),
%s varchar(128),
%s varchar(128),
%s char(128))"""
% ('user',
'id',
'name',
'passworld',
'number',
'status'
))
sql.close()
create_sql()
#user_data.db為數據庫文件名
#create table if not exists為建立一個數據庫指令,如果文件存在就打開,不存在就創建一個
#%s對應后面的四個參數
# 'user':表名
# 'id':相當於一個索引,autoincrement指定為自動增量
# 'name',用戶名
# 'passworld'用戶密碼
# 'number':座位號
# 'status:狀態
# sql.close()是關閉數據庫,每次對數據庫進行操作后,都要記得進行關閉操作
#數據庫的格式
# file:user_data.db
# table:user
# id name passworld number status
數據庫管理
import sqlite3
# 數據庫增加數據
def add_data():
input_name = input("請輸入您的用戶名:")
input_passworld = input("請輸入您的密碼:")
number=input('請輸入學號')
status=None
sql = sqlite3.connect("user_data.db")
sql.execute("insert into user(name,passworld,number,status) values(?,?,?,?)",
(input_name,input_passworld,number,status))
sql.commit()
print("添加成功")
sql.close()
# 這里增加了讀取四個個參數values(?,?,?,?)字段里的四個?號,對應了參數input_name,input_passworld,number,status
def showalldata():
sql = sqlite3.connect("user_data.db")
data = sql.execute("select * from user").fetchall()
sql.close()
return data
# "select * from user"為查詢user對應的表的所有資料的指令
def drop():
print('指定id刪除')
sql = sqlite3.connect("user_data.db")
data = sql.execute("select * from user").fetchall()
print('所有數據:'+str(data))
while 1:
id=input('請輸入你要刪除的數據的id:')
sql.execute("DELETE FROM user WHERE id = %s" % id)
sql.commit()
print('刪除完成')
data=sql.execute("select * from user")
print(data.fetchall())
sql.close()
break
print("""
1:增加數據
2:查詢數據
3.刪除數據
q:退出
""")
while 1:
option =None
cho =input('選擇您想要的進行的操作:')
if cho == '1':
add_data()
elif cho == '2':
data=showalldata()
print(data)
elif cho == '3':
drop()
elif cho == 'q':
break
else:
"輸入錯誤"
簡單登陸
import sqlite3, getpass
#保證每一個用戶名和學號不同
#輸入用戶名正確后,輸入密碼。用戶名正確的情況下,密碼連續輸錯三次,用戶將被鎖定,禁止登錄系統
#輸入用戶名后,如果用戶名被鎖定及無效用戶名,程序會退出,請確保輸入正確。
def showdate(username):
sql = sqlite3.connect('user_data.db')
data = sql.execute("select * from user where name='%s'" % username).fetchone()
sql.close()
return data
# ("select * from user where username='%s'"% name)這條指令用來查詢表user的name字段的對應的數據
# 最后返回用戶名對應的資料
def val():
while 1:
name = input("用戶名:") # 輸入用戶名
data = showdate(name) # 獲取用戶名對應的數據庫資料
if data:
# passworld = getpass.getpass("密碼") # 輸入密碼
passworld=input('密碼:')
if data[2] == passworld:
print("登錄成功")
break
else:
print("密碼錯誤")
else:
print("用戶名不存在")
# getpass模塊可以使輸入的字符不可見,在python的shell中可能無效,在終端中和用戶登錄效果相同,不出現輸入字符
val()
print("進入用戶操作")
