目录
数据库结构介绍
为了数据安全,防止被窃取,将考勤打卡数据保存到数据库中。
1 数据库表结构
数据库中主要存放用户打卡考勤的相关信息,表名称为attendance,主要包含用户id、姓名、上班打卡时 间、考勤状态(是否迟到)、下班打卡时间及上班时长等字段,每个字段的类型和说明如表所示。 本案例采用SQLite数据库。
员工考勤状态表
2 SQLite数据库的安装配置
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,不需要在系统中配置,也没有繁琐的安装过 程。就像其他数据库,SQLite引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。 SQLite 直接访问其存储文件。
在 Windows 上安装 SQLite,步骤如下:
1. 访问SQLite官网https://www.sqlite.org/download.html,从 Windows 区下载预编译的二进制文件,根 据操作系统32位或者64位,下载对应的sqlite-tools-win32-*.zip 和 sqlite-dll-win32-*.zip压缩文件。
2. 创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 等文件。
3. 添加 C:\sqlite到 PATH环境变量,最后在命令提示符下,使用sqlite3命令,将显示如下结果。
C:\Users\Administrator>sqlite3
SQLite version 3.32.3 2020-06-18 14:00:33
Enter ".help" for usage hints.
Enter SQL statements terminated with a ";"
sqlite>
3 SQlite的python操作
SQLite3 可使用 sqlite3 模块与 Python 进行集成。sqlite3 模块是由 Gerhard Haring 编写的。它提供了一 个与 PEP 249 描述的 DB-API 2.0 规范兼容的 SQL 接口。Python 2.5.x 以上版本中,内置了sqlite3模 块,所以不需要额外安装,直接导入即可。
import sqlite3
为了使用 sqlite3 模块,首先必须创建一个表示数据库的连接对象,然后有选择地创建光标对象,这将帮 助我们执行所有的 SQL 语句。如表所示是重要的 sqlite3 模块程序,可以满足 Python 程序中使用 SQLite 数据库的需求。
1. 连接数据库和建表操作
下面的 Python 代码显示了如何连接到一个现有的数据库并创建一个表。如果数据库不存在,那么它就 会被创建,最后将返回一个数据库对象。
import sqlite3
conn = sqlite3.connect('test.db')
print("Opened database successfully!")
c = conn.cursor()
c.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')
print("Table created successfully")
conn.commit()
conn.close()
2. 插入操作
下面的 Python 程序显示了如何在上面创建的 COMPANY 表中创建记录。
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (1, 'Paul', 32, 'California', 20000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (2, 'Allen', 25, 'Texas', 15000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )")
conn.commit()
print("Records created successfully!")
conn.close()
3.查询操作
下面的 Python 程序显示了如何从前面创建的 COMPANY 表中查询并显示记录。
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
cursor = c.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print("ID = ", row[0])
print("NAME = ", row[1])
print("ADDRESS = ", row[2])
print("SALARY = ", row[3], "\n")
print("Operation done successfully")
conn.close()
4. 更新操作
下面的 Python 代码显示了如何使用 UPDATE 语句来更新任何记录,然后从 COMPANY 表中获取并显 示更新的记录。
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1")
conn.commit()
print("Total number of rows updated :", conn.total_changes)
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print("ID = ", row[0])
print("NAME = ", row[1])
print("ADDRESS = ", row[2])
print("SALARY = ", row[3], "\n")
print("Operation done successfully")
conn.close()
5. 删除操作
下面的 Python 代码显示了如何使用 DELETE 语句删除任何记录,然后从 COMPANY 表中获取并显示剩余的记录。
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute("DELETE from COMPANY where ID=2;")
conn.commit()
print("Total number of rows deleted :", conn.total_changes)
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print("ID = ", row[0])
print("NAME = ", row[1])
print("ADDRESS = ", row[2])
print("SALARY = ", row[3], "\n")
print("Operation done successfully")
conn.close()
本节课我们学习了数据库结构介绍的相关内容。下节课我们将学习服务器打卡函数实现的相关内容。我会带着大家一起完成人脸识别打卡项目的所有内容。