Python腳本:實現excel表格導入到數據庫,支持mysql,postgresql,MongoDB


 1 import xlrd,re
 2 from datetime import datetime
 3 from xlrd import xldate_as_tuple
 4 
 5 
 6 # 判斷上傳表格是否與模板要求一致
 7 def checkExcel(path,field_attr):
 8     #1.打開當前excel表格
 9     data = xlrd.open_workbook(path)
10     now_table = data.sheet_by_index(0)
11     #當前表格的行數
12     rows_numn = now_table.nrows
13 
14     #2.1驗證長度
15     table_index = now_table.row_values(0)
16     if len(field_attr) != len(table_index):
17         return False,'表格行數應為{0}行'.format(len(field_attr))
18     else:
19         #2.2驗證內容
20         flag = True
21         msg = ''
22         for k in range(1, rows_numn):
23             # 2.2.1驗證內容12,13是否馬滿足時間格式%y-%m-%d %H
24             start_time = now_table.cell(k,12)
25             end_time = now_table.cell(k,13)
26             pattern = r"(\d{4}-\d{2}-\d{1,2}\s\d{2})"
27             if re.match(pattern,start_time) == None:
28                 flag = False
29                 msg += '第{0}行第{1}列格式用為 2018-01-01 00 格式'.format(k,12+1)
30             if re.match(pattern,end_time) == None:
31                 flag = False
32                 msg += '第{0}行第{1}列格式用為 2018-01-01 00 格式'.format(k,13+1)
33             if len(msg) >=100:
34                 msg += '.....'
35                 break
36         return flag, msg
37 
38 
39 
40 #數據庫表添加一條數據的方法
41 def addObj(obj):
42     pass#不同數據實現方法不一樣
43 
44 
45 
46 #將表格數據插入數據庫 path上傳表格路徑 field_attr值表格行數對應字段如{0:'name',1:'age',2:'sex'}
47 def exportExcel(path,field_attr):
48     #1.檢查表格
49     flag,msg = checkExcel(path,field_attr)
50     if not flag:
51         return msg
52     else:#通過驗證
53         # 2.讀取excel
54         data = xlrd.open_workbook(path)
55         now_table = data.sheet_by_index(0)
56         # 獲得當前表格的行數
57         rows_numn = now_table.nrows
58         # 將當前的sheet插入到數據庫
59         for k in range(1, rows_numn):
60             row_vlaue = now_table.row_values(k)
61             obj = {}
62             # 處理要插入的數據,把非字符串的數據轉換成字符串類型,同事將字符串變成 sql語句需要的類型
63 
64             for a in range(0, len(row_vlaue)):
65                 ctype = now_table.cell(k, a).ctype
66                 # ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
67                 if ctype == 1:
68                     row_vlaue[a] = row_vlaue[a].replace("'","/'")
69                 if ctype == 2 and row_vlaue[a] % 1 == 0:
70                     tmp = int(row_vlaue[a])
71                     row_vlaue[a] = str(tmp)
72                 if ctype == 3:
73                     d = datetime(*xldate_as_tuple(row_vlaue[a], 0))
74                     row_vlaue[a] = d.strftime('%Y-%m-%d %H')
75                 obj[field_attr[a]] = row_vlaue[a]
76             #3.將該行數據插入數據庫
77             try:
78                 addObj(obj)
79             except:
80                 return '第{0}行數據插入失敗'.format(k)
81         return 'ok'

支持.xlsx結尾的excel文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM