使用SQLite3模块轻松实现Python中的小型数据库应用

发表时间: 2022-12-14 17:09

常见的数据库系统都比较庞大且操作复杂,需要在目标电脑上安装数据库软件才能够正常使用,通常应用于大型数据库项目开发。而一些小型数据信息管理项目,数据量小,不需要过高的安全强度,如果使用大型数据库来开发就显得大材小用了,无形中还增添了开发难度。

正是基于这种情况,Python语言内置了 一套轻量级数据库系统,具有小巧、高效、可靠的优点,能够满足很大一部分人的开发需求!


一、SQLite3模块简介

SQLite3是Python的一个内置模块,是一套开源嵌入式关系数据库系统,它不需要独立的服务器进程,数据库就是一个.db后缀的文件,可以跨平台直接访问,非常便捷。详细特点如下:

  • 无需安装、零配置、不需要启动服务
  • 不需要单独文件系统,数据库存储在单一文件中
  • 支持事务操作
  • 服务器和客户端在同一进程空间运行,不需要独立的服务器进程
  • 小巧,灵活,高效,可靠

二、SQLite3模块的使用方法

1、基本步骤

  • 导入SQLite3模块
  • 连接数据库
  • 创建游标对象
  • 编写SQL语句
  • 执行SQL语句
  • 提交事务
  • 关闭游标
  • 关闭数据库连接

演示代码如下:

# 导入sqlit3模块import sqlite3# 创建连接,新建或打开数据库conn = sqlite3.connect('demo.db')# 创建游标对象cur = conn.cursor()# 编制SQL语句,创建一个包含三个字段的表,其中pno是自动递增的,不需要输入sql = '''create table if not exists t_person(        pno INTEGER primary key autoincrement,        pname VARCHAR not null,        age INTEGER)'''# 执行sql语句,编写sql语句很容易出错,因此采取异常处理try:    cur.execute(sql)  # 执行sql语句    print('创建表成功!')except Exception as err:    print(err)    print('创建表失败!')finally:    cur.close()  # 关闭游标    conn.close()  # 关闭连接

2、向表中插入数据

import sqlite3conn = sqlite3.connect('demo.db')cur = conn.cursor()# t_person(pname,age)表示向这两个字段插入数据,values(?,?)里的问号是先占位# 在调用时再给出具体值,这样处理不仅灵活,还可以防止sql注入sql = 'insert into t_person(pname,age) values (?,?)'try:    cur.execute(sql, ('张三', 23))  # 插入一行数据    cur.executemany(sql,[('李四',24),('王五',22),('赵六',25)])  # 插入多行数据    conn.commit()  # 提交事务,向表中写入    print('插入数据成功!')except Exception as err:    print(err)    print('插入数据失败!')    conn.rollback()  # 事务回滚,返回到执行sql语句前的状态finally:    cur.close()    conn.close()

3、从表中读取数据

import sqlite3conn = sqlite3.connect('demo.db')cur = conn.cursor()sql = 'select * from t_person'try:    cur.execute(sql)    # fetchall方法用于取得所有结果,fetchone是取得一条结果    result = cur.fetchall()    for i in result:        print(i)except Exception as err:    print(err)    print('查询失败!')finally:    cur.close()    conn.close()

4、修改表中数据

import sqlite3conn = sqlite3.connect('demo.db')cur = conn.cursor()sql = 'update t_person set age=? where pno=?'try:    cur.execute(sql, (26, 1))  # 修改指定序号的年龄内容    conn.commit()    print('修改数据成功!')except Exception as err:    print(err)    print('修改数据失败!')    conn.rollback()finally:    cur.close()    conn.close()

5、删除表中数据

import sqlite3conn = sqlite3.connect('demo.db')cur = conn.cursor()sql = 'delete from t_person where pno=?'  # 删除指定序号的一行数据try:    cur.execute(sql, (2,))  # 元组只有一个值时,必须在值后面加逗号    conn.commit()    print('删除数据成功!')except Exception as err:    print(err)    print('删除数据失败!')    conn.rollback()finally:    cur.close()    conn.close()

6、其它常用操作

  • 查询数据库中包含的所有表
import sqlite3conn = sqlite3.connect('demo.db')cur = conn.cursor()sql = 'select name from sqlite_master where type="table"'cur.execute(sql)tables = cur.fetchall()print(tables)
  • 删除数据库中的表
cur.execute('drop table tablename')
  • 查询表结构
cur.execute('pragma table_info(t_person)')print(cur.fetchall())
  • 查询前10条记录
cur.execute('select * from t_person limit 0,10')
  • 查询表中不重复字段
cur.execute('select distinct pname from t_person')

7、技巧分享

当创建了数据库之后,在pycharm界面左侧边栏当前项目下方会显示数据库名称,鼠标左键双击需要操作的数据库名称,就会弹出数据库控制台console窗口,在这个窗口里面就可以直接输入SQL语句,点击控制台窗口的左上角的绿色运行按钮就会执行SQL语句,用来调试数据库非常方便,免得反复写完整的python代码进行调试输出。

并且,在数据库控制台里书写SQL代码时,会有代码辅助提示,免得记不住关键字而反复查阅。可以在控制台里书写并调试SQL语句,然后再将SQL语句复制粘贴到程序代码中,方便快捷,确保代码执行无误!

数据库控制台界面如下:

SQL控制台界面


三、综合实例

现在对上一篇办公自动化之使用python-docx模块操作Word文档”中的综合实例进行改良,这里要求从员工档案里提取相关信息,写入到数据库中进行管理。案例如下:

某公司有几十或几百员工,每名员工都有一份word文档的档案信息表,文档格式均相同,见下图:

个人档案信息表

现在想建立一个数据库,用于管理人员基本信息,要求内容有姓名、性别、出生年月等8项内容,这些内容在员工档案信息表里都有,如果采取向数据库里录入的形式,工作量太大,还容易出错,这里用程序来实现!

代码如下:

import sqlite3from docx import Documentfrom pathlib import Path# 自定义函数,返回word表格指定行列的单元格内容def result(row, col):    cell = table.rows[row].cells    return cell[col].text# 创建数据库,库名dossier.db,表名t_person# 字段:pno序号,pname姓名,gender性别,birth出生年月,nation民族,parth入党时间,job参加工作事件,pro职称,school毕业院校conn = sqlite3.connect('dossier.db')cur = conn.cursor()sql = '''create table if not exists t_person(pno INTEGER primary key autoincrement,        pname VARCHAR not null,gender VARCHAR,birth VARCHAR,nation VARCHAR,parth VARCHAR,        job VARCHAR,pro VARCHAR,school VARCHAR)'''try:    cur.execute(sql)except Exception as err:    print(err)    print('创建表失败!')# 获取所有档案信息文件名path = Path('档案信息')  # 创建路径对象files = list(path.glob('*.docx'))  # 遍历指定路径下所有docx文件,并转换成列表# 从个人档案文件中读取相关信息并写入到数据库中for file in files:  # 遍历有得到的所文件    doc = Document(file)  # 打开文档    table = doc.tables[0]  # 指定读取的表格    # 利用自定义函数result读取文档中指定位置的内容,放置到元组中    person =(result(0, 1), result(0, 3), result(0, 5), result(1, 1), result(2, 1), result(2, 3), result(3, 1),           result(4, 5))    # 将个人信息写入到数据库中    sql = 'insert into t_person(pname,gender,birth,nation,parth,job,pro,school) values (?,?,?,?,?,?,?,?)'    try:        cur.execute(sql, person)  # 插入一行数据        conn.commit()  # 提交事务,向表中写入    except Exception as err:        print(err)        print('插入数据失败!')        conn.rollback()  # 事务回滚,返回到执行sql语句前的状态# 关闭数据库相关对象cur.close()conn.close()print('数据写入完毕!!!')

程序执行后,生成数据库,查看表内容如下:

新建的人员信息表