通过Python将Excel表格信息导入数据库

前言

    公司原采用Excel表格方式记录着服务器资产信息,随着业务的增加,相应的硬件资产也增加,同时物理机虚拟化出多台虚拟机,存在表格管理杂乱、变更资产信息不能及时相互同步, 为了紧跟时代的步伐,老大搞了个基于Django框架的资产管理平台,用于记录资产信息;

    而我负责将服务器信息梳理及将其信息录入到资产管理平台,在整理好Excel的基础上,个人初步了解下Django,得知通过操作页面手工录入的信息将存储到MySQL的指定库的指定表中,为了高效信息录入,笔者将使用Python将Excel表格中的资产信息导入到数据库中!

环境

1)确定要导入到数据库中的对应表的结构,如下:

2)根据表结构整理好对应的Excel表格,如下:

脚本

# cat insert.py

 1 # -*- coding: utf-8 -*-
 2 # Author: kazihuo
 3 
 4 import pymysql
 5 import xlrd
 6 
 7 # 连接数据库
 8 try:
 9     db = pymysql.connect(host="10.2.5.200", user="root",
10                          passwd="123456",
11                          db="OPSINFO",
12                          charset='utf8')
13 except:
14     print("could not connect to mysql server")
15 
16 
17 def open_excel():
18     try:
19         book = xlrd.open_workbook("test.xlsx")
20         # test.xlsx是表格文件,当其不与此脚本在同一目录下时,需要写上其绝对路径
21     except:
22         print("open excel file failed!")
23     try:
24         sheet = book.sheet_by_name("ops-info")
25         # ops-info是表sheet名称,不理解的可看上图;
26         return sheet
27     except:
28         print("locate worksheet in excel failed!")
29 
30 
31 def insert_deta():
32     sheet = open_excel()
33     cursor = db.cursor()
34     row_num = sheet.nrows
35     for i in range(1, row_num):
36     # 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1
37         row_data = sheet.row_values(i)
38         value = (row_data[0], row_data[1], row_data[2], row_data[3], row_data[4], row_data[5])
39         # value代表的是Excel表格中的每行的数据
40         print(i)
41         sql = 'INSERT INTO CN2Info_machins() VALUES(%s,%s,%s,%s,%s,%s)'
42         # sql = 'INSERT INTO CN2Info_machins(Host,IP,IdracIP,Position,Rack,ST) VALUES(%s,%s,%s,%s,%s,%s)'
43         cursor.execute(sql, value)  # 执行sql语句
44         db.commit()
45     cursor.close()  # 关闭连接
46 
47 
48 open_excel()
49 insert_deta()

### 运行脚本后,可在数据库中看到对应信息,如下:

### 页面也出现对应信息,如下:

### 脚本参考链接 https://www.cnblogs.com/longbigbeard/p/9309180.html

### 注意

    因为表中的id是自增字段,故笔者在Python脚本中插入数据时,只写了对应需要插入的字段信息!

报错

笔者在操作过程中出现一些麻烦,报错如下:

pymysql.err.InternalError: (1136, "Column count doesn't match value count at row 1")

# 解决方法

    报错原因在于插入数据时,插入的信息字段与数据库字段不一致,导致的原因可能是"Excel表格与数据库中表结构不对应" 或者 "脚本中的插入语句存在纰漏" ,当认真核对字段信息后再次操作,即可解决!

猜你喜欢

转载自www.cnblogs.com/kazihuo/p/11128248.html