SearchAppoint v0.16

本文介绍了一款小程序中使用SQLite3数据库实现用户手机号和密码存储及快速选择功能的方法。包括数据库设计、关键代码示例及异常处理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近由于工作的原因,没有太多功夫来更新这个小程序。这两天终于腾出空来又对它更新了两个功能:常用用户的手机号和密码存储以及常用用户的快速选择。这两个功能主要通

过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地址:点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值