前言
公司原采用Excel表格方式記錄着服務器資產信息,隨着業務的增加,相應的硬件資產也增加,同時物理機虛擬化出多台虛擬機,存在表格管理雜亂、變更資產信息不能及時相互同步, 為了緊跟時代的步伐,老大搞了個基於Django框架的資產管理平台,用於記錄資產信息;
而我負責將服務器信息梳理及將其信息錄入到資產管理平台,在整理好Excel的基礎上,個人初步了解下Django,得知通過操作頁面手工錄入的信息將存儲到MySQL的指定庫的指定表中,為了高效信息錄入,筆者將使用Python將Excel表格中的資產信息導入到數據庫中!
環境
1)確定要導入到數據庫中的對應表的結構,如下:
2)根據表結構整理好對應的Excel表格,如下:
腳本

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(Host,IP,IdracIP,Position,Rack,ST) VALUES(%s,%s,%s,%s,%s,%s)' 42 cursor.execute(sql, value) # 執行sql語句 43 db.commit() 44 cursor.close() # 關閉連接 45 46 47 open_excel() 48 insert_deta()
### 運行腳本后,可在數據庫中看到對應信息,如下:
### 頁面也出現對應信息,如下:
### 注意
因為表中的id是自增字段,故筆者在Python腳本中插入數據時,只寫了對應需要插入的字段信息!
報錯
筆者在操作過程中出現一些麻煩,報錯如下:
pymysql.err.InternalError: (1136, "Column count doesn't match value count at row 1")
# 解決方法
報錯原因在於插入數據時,插入的信息字段與數據庫字段不一致,導致的原因可能是"Excel表格與數據庫中表結構不對應" 或者 "腳本中的插入語句存在紕漏" ,當認真核對字段信息后再次操作,即可解決!