前言
前几天即将做完一个商业项目,关于教师绩效考核,开发者只有我和我师兄,可谓是困难重重,感觉超出了我和师兄知识范围,不过学到了很多新技术,苦并快乐着
背景
后面新增加了一个蛮复杂的需求,还好有大神师兄带着,我们两解决完成了,然后需要导入几个excel表的教师成果项目,横向项目,纵向项目,论文,著作等等
作为一个程序员小萌新,当然不会采取一条条导入的傻操作啦。
环境及准备
所需库
- xlrd (python操作excel库)
- PyMysql(python操作mysql库)
安装
若没有的话,安装命令如下
$ pip install xlrd
$ pip install pymysql
分析
需求分析
1. 每个excel表一行一个项目名称
2. 需要导入mysql表project上,有三个字段id(项目id) , name(项目名称),table_id(所属计算模板表外键id)
思路
首先对每个excel表取出某一行(row),得到每一行数据
其次连接数据库,进行插入
由于有上千条数据,希望能够全部一次性全部导入,因此使用mysql事务,当有一条导入不成功进行事务回滚
源码
# Author:Alex Jakin
import xlrd
import pymysql
def main():
#文件位置
ExcelFile=xlrd.open_workbook(
r'xxxx')#你的excel文件路径
#选择哪个sheet
sheet=ExcelFile.sheet_by_name('Sheet1')
#连接数据库
db = pymysql.connect("", "", "", "")
# 使用cursor()方法获取操作游标
cur = db.cursor()
# 开始导入
try:
#循环sheet的每一行
for i in range(0, sheet.nrows):
sql_insert = "insert into project(name,table_id) values('{project_name_}',44)".format(project_name_=sheet.row_values(i)[0])
print(sheet.row_values(i)[0])
cur.execute(sql_insert)
# 提交
db.commit()
print("共导入{num_}条".format(num_=sheet.nrows))
except Exception as e:
# 错误回滚
db.rollback()
print(e)
finally:
db.close()
if __name__ == '__main__':
main()
实现导入并不难,主要是新加需求比较复杂,后面有机会我会分享