在工作中,为了方便检索分析,将合同信息保存在了SQLite数据库中,因为SQLite是单文件数据库,相对来说方便转移和备份,不需要安装平台软件。
然后针对每一份合同设计了一张Excel表格作为录入表单,也可以认为就是一个入库单,一个表记录了一个合同的信息。
通过Python的xlrd库读取Excel表格,再通过sqlite3库写入数据库。为什么用xlrd这么原始的库呢?也试过openpyxl和xlwings,越是功能完善,依赖的上游库越多,比如我用xlwings就遇到了依赖pywin32库,无法解决。影响的是py脚本的转移成本。
接下来写实现:
一、Excel 示例表 (文件名:Test.xlsx 工作表名:ReadExcel)
序号 | 名称 | 数值 |
---|---|---|
1 | 甲 | 15 |
2 | 乙 | 16 |
3 | 丙 | 17 |
二、sqlite3数据库(数据库文件名:Test.db 表名:ReadExcel)
推荐使用SQLiteStudio工具提前创建好对应格式的数据库和数据表,图形化的方式相对来说比较简单。
三、python代码(代码py文件和数据库和Excel文件放在同一个目录下)
因为涉及到中文,所以在代码开头要声明使用utf-8编码
#-*- coding:utf-8-*-
import xlrd
import sqlite3
#使用xlrd库来只读打开Test.xlsx文件,打开ReadExcel工作表
wb=xlrd.open_workbook('Test.xlsx')
ws=wb.sheet_by_name('ReadExcel')
#使用sqlite3库打开Test.db数据库,cur是数据库游标,相当于一个操作点(机械臂)
conn=sqlite3.connect('Test.db')
cur=conn.cursor()
#python中的计数是从0开始的,对Excel单元格的计数也是从0开始的,要对应调整好
for i in range(3):
序号=ws.cell_value(i+1,0)
名称=ws.cell_value(i+1,1)
数值=ws.cell_value(i+1,2)
#读取一行单元格信息,一并写入数据库,等到写完了再一起提交
cur.execute("INSERT INTO ReadExcel (序号,名称,数值) values(?,?,?)",(序号,名称,数值))
#提交对数据库的操作
conn.commit()
#最后别忘了关数据库,如果忘了关闭数据库,会出现数据库文件一直在被锁定状态,无法修改删除等。
conn.close()
导入数据库完成后,可以用SQLiteStudio工具查看一下数据库表的数据。