利用Python将Excel的部分字段信息更新进MySQL
我们在实际工作中,可能会遇到需要定期批量更新数据库中某个字段的值,比如学生花名册的【曾用名】就需要定期更新(只更新这个字段,其余的数据不需要改变)。但是现有的数据库管理工具没有这种批量更新部分字段的功能,基本只有追加、清空再插入、新建表等功能。
需求描述:比如现在我手里已经有张Excel表,里面就2列,一列是学号,一列是曾用名。我要把【曾用名】按照学号更新进MySQL的学生花名册。
这个功能利用代码来实现,逻辑很简单,就是如下语句的一个循环:
update table1 set 字段1=值1 ,set 字段2=值2 ,set 字段2=值2 where 条件;
通过这样一个简单例子,我把这种需求抽象出来,定义了一个方法update_xiangmu
使用方法是:
update_xiangmu(
MySQL数据库连接参数,
需要更新的表名,
Excel路径,
需要更新的字段数据来自Excel中的第几张表,
需要更新的字段[字典形式],
匹配的字段[字典形式]
)
代码
import pymysql #pymysql不是anaconda自带的,需要安装。
import xlrd
import datetime
import math
def update_xiangmu(dbconfig,table,xlpath,shtnum,cols_upd,col_on):
#连接数据库的参数放在一个字典里,需要更新的表名,Excel路径,第几张表,需要更新的字段列表(字典形式,字段名:第几列),作为匹配的字段(字典形式,匹配字段名:第几列。支持复合索引)
#这里面参数的第几,都是从1开始数。不用管是从0还是从1,因为下文会处理
#默认项目中心、项目、项目细分、项目课程是挨着的。
#大概2秒更新1000行
#Excel路径含中文好像不会报错。
db = pymysql.connect(**dbconfig) #解开字典参数
print(str(datetime.datetime.now())+'连接MYSQL数