最近由于工作的原因,没有太多功夫来更新这个小程序。这两天终于腾出空来又对它更新了两个功能:常用用户的手机号和密码存储以及常用用户的快速选择。这两个功能主要通
过sqlite3数据库实现。
数据库的设计比较简单,只有一个SA_usr表,4个字段:id, mobile,pwd和comment。id作为每个用户在程序内的唯一标识(虽然现在还没什么用……),mobile和pwd分别存储用
户的手机号和密码。由于是本地数据库,因此直接采用明文方式存储了,也许以后会改为加密存储方式,而comment为备注,会在常用用户的下拉框中显示。
数据库类db_helper代码如下:
# -*- coding=utf-8 -*-
import sqlite3,os,time,base64
class db_helper:
def __init__(self):
self.__basename='usual_user.db'
self.__basepath=os.path.dirname(__file__)
self.__db_path=os.path.join(self.__basepath,self.__basename)
#建立表
conn=sqlite3.connect(self.__db_path)
create_sql='''
CREATE TABLE SA_usr (id nchar(20) unique NOT NULL,
mobile nchar(20) unique NOT NULL,
pwd nchar(20) NOT NULL,
comment
)
'''
try:
conn.execute(create_sql)
conn.commit()
except sqlite3.OperationalError:
pass
finally:
conn.close()
#添加用户
def create_user(self,usrname,password,comment=""):
if usrname == "" or password == "":
return False
conn = sqlite3.connect(self.__db_path)
cur = conn.cursor()
sql_statement = r'insert into SA_usr values (?,?,?,?)'
try:
cur.execute(sql_statement, (str(time.time()), str(usrname), str(password),unicode(comment)))
conn.commit()
except sqlite3.OperationalError,e:
return e
except sqlite3.IntegrityError,e:
print e.message
return e
finally:
cur.close()
conn.close()
return True
#获取用户
def get_usr(self,mobile_no):
conn=sqlite3.connect(self.__db_path)
cur=conn.cursor()
try:
cur.execute(r'select mobile,pwd from SA_usr where mobile=?',(str(mobile_no),))
result=cur.fetchone()
except sqlite3.OperationalError:
return False
finally:
cur.close()
conn.close()
return (result[0],result[1])
#获取用户名单
def get_user_list(self):
conn=sqlite3.connect(self.__db_path)
cur=conn.cursor()
try:
cur.execute(r'select mobile,comment from SA_usr')
result = cur.fetchall()
print result
except sqlite3.OperationalError:
return False
finally:
cur.close()
conn.close()
return result
在程序运行时,首先会检测有没有usual_user.db数据库的存在,若没有就建立一个。随后检查数据库里有无SA_usr表的存在,若没有也建立一个。create_user函数通过执行
insert语句向SA_usr表里添加用户数据,并根据数据库的返回判断是否添加成功;get_usr通过选定的手机号将用户的手机号和密码从数据库中返回,以便登录窗口调用;而
get_user_list函数则从数据库里选择所有用户的手机号及其备注,并返回。
如图所示,在工具栏中新加了一个添加常用用户的按钮:
点击后弹出添加常用用户对话框:
话说PyQt的这个GridLayout也是够了,它就不能把按钮排布平均一下么?
随便输个手机号,然后点击添加:
当然,这里说是随便,但也要符合手机号的特点。在GUI端采用了正则表达式对输入的手机号进行了一下简单的验证。
然后在登录窗口中点一下刷新,新增的用户就在下拉框中出现了:
选择后,手机号和密码自动出现在上方:
总的来说,处理和数据库相关的内容时,需要对存入的数据进行一些检查,以及处理当数据插入、查询失败时所返回的异常。在这个功能中,当插入的手机号有重复时,会触发
sqlite3.IntegrityError异常,可根据其message属性内容在GUI中的ErrorMessage中给用户反馈;当查找的表不存在或已存在时,会触发sqlite3.OperationalError,也需根据实际
情况处理。
github地址:点击打开链接