1. 描述
最近在做一个类似人脸识别的打卡系统,最后收尾阶段,需要将打卡成功的学生信息保存到sqlite3数据库中,并且能显示到对应的界面上,最后实现的界面,直接上图:
2. 设计思路
1.首先是打卡成功后将数据插入到sqlite3中。
#将签到成功的数据写入sqlite3中
def save_tosqlite3(self,id,name,department,datetime):
self.id = id
self.name = name
self.department = department
self.datetime = str(datetime)
print(self.datetime)
conn = sqlite3.connect('my.db')
c = conn.cursor()
#c.execute('CREATE TABLE STUDENT_2(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,DEPARTMENT TEXT NOT NULL,DATE TXET NOT NULL)')
c.execute("INSERT INTO STUDENT_2(ID,NAME,DEPARTMENT,DATE) VALUES (?,?,?,?)",(self.id,self.name,self.department,self.datetime))
conn.commit()#这句一定要写上!!!表示提交事务,写上了才能保存到数据库中。
2.其次是获取数据并显示到界面上
def search_tosqlite3(self):
conn = sqlite3.connect('my.db')
c = conn.cursor()
print("Opened database successfully")
# 查询操作
#c.execute("INSERT INTO STUDENT_2(ID,NAME,DEPARTMENT,DATE) VALUES (1,'f','s','2020-10-8')")
print("添加成功")
cursor = c.execute("SELECT ID,NAME,DEPARTMENT,DATE FROM STUDENT_2")
print("查询成功")
for row in cursor:
print("ok1")
print("ID = ", row[0])
print("NAME = ", row[1])
print("ADDRESS = ", row[2])
print("DATETIME = ", row[3])
id = str(row[0])
user = row[1]
department = row[2]
date_time = row[3]
#insertRow()添加第几行的数据,可以通过for循环的执行次数来判断
rowcount = self.tableWidget.rowCount()
self.tableWidget.insertRow(rowcount)
# 插入数据
self.tableWidget.setItem(rowcount, 0, QTableWidgetItem(id))
self.tableWidget.setItem(rowcount, 1, QTableWidgetItem(user))
self.tableWidget.setItem(rowcount, 2, QTableWidgetItem(department))
self.tableWidget.setItem(rowcount, 3, QTableWidgetItem(date_time))
3.小结
在做的过程中,遇到两个困难,其一,在插入数据到sqlite3时,有变量该如何操作?见我之前写的一篇文章:python+sqlite3:如何在sqlite3插入中加入变量
其二,对于数据库的操作比较生疏,遗忘了conn.commit()语句导致数据没有保存成功。