PyQT 跟我学做密码管理器(4) —— 加载数据库
声明:本文借鉴https://blog.csdn.net/bigbennyguo/article/details/50755207 修改而来
前言
借鉴的文章是基于python2+pyqt4,本文是基于python3+pyqt5
环境
编辑器:Sublime Text3
操作系统:win10
Python3
所需要的库:主要是PyQT5,因为加了一点拓展功能,所以还有sqlite3,Image,pyinstaller
pip3 install pyqt5
pip3 install pyqt5-tools
pip3 install sqilte3
pip3 install Image
pip3 install pyinstaller
首先是pyqt5, 这个是我们的主要工具,用来做界面的,pyqt5-tools这个库主要是是在用QT Creator设计好界面之后,将ui文件转化为py文件;
sqlite3这个库可以安也可以不安,因为pyqt5里面有一个模块QtSql,它支持sqlite的操作;
Image这个库主要是用来处理一下图片资源,以及最后程序的图标的
pyinstaller 最后将程序转化为可执行的exe文件
加载数据库
选择的是sqlite3,因为这个轻量级,能够移植
关于sqlite3的操作语句,其实没有必要了解特别多,网上随便搜一下,学点简单的语法就好了,这里不过多说sql语句的问题
首先是导入sqlite3(前面说过,因为是使用的Pyqt,可以不用导入sqlite3,直接使用pyqt自带的QtSql),它两个的数据库语句一样,只是导入方式,还有用法稍微有一点不一样,这里使用的是sqlite3的方法
初始化DB函数initDB
首先判断本地有没有这个DB文件,没有就初始化数据库文件,建表,获取连接句柄
有这个文件,就直接获取数据库句柄
根据数据库句柄,得到数据库中的所有数据
def initDB(self):
home = os.path.expanduser('~')
if '.PasswordManageSystem' not in os.listdir(home):
os.mkdir(os.path.join(home, '.PasswordManageSystem'))
dbpath = os.path.join(home, '.PasswordManageSystem', 'PasswordManagement.db')
if os.path.exists(dbpath):
self.conn = sqlite3.connect(dbpath)
self.conn.isolation_level = None
else:
self.conn = sqlite3.connect(dbpath)
self.conn.isolation_level = None
self.conn.execute('''CREATE TABLE INFO
(ID int PRIMARY KEY NOT NULL,
WEBSITE char(255),
USERNAME char(255),
PASSWORD char(255),
URL char(255))''')
cur = self.conn.cursor()
cur.execute('SELECT * FROM INFO')
self.displayData = cur.fetchall()
cur.close()
self.current_row = len(self.displayData)
然后将这些数据在初始化tableview的时候,将其加载出来
def initGrid(self):
self.grid = QTableWidget()
self.setCentralWidget(self.grid)
self.grid.setColumnCount(4)
self.grid.setRowCount(0)
column_width = [75, 150, 270, 150]
for column in range(4):
self.grid.setColumnWidth(column, column_width[column])
headerlabels = ['Website', 'Username', 'Password', 'Url']
self.grid.setHor