-
Notifications
You must be signed in to change notification settings - Fork 185
/
Copy pathsave_excel_to_mysql.py
94 lines (78 loc) · 2.23 KB
/
save_excel_to_mysql.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# -*- coding:utf-8 -*-
import xlrd
import MySQLdb
import os
import logging
import shutil
import sys
def main(path):
"""
打开目录遍历excel文件并存储到mysql
"""
files = os.listdir(path)
for file in files:
save_file(path + '/' + file, file)
print(file)
def save_file(file, filename):
"""
打开excel文件
"""
try:
book = xlrd.open_workbook(file)
sheet = book.sheet_by_index(0)
except Exception as e:
logging.info('错误:{0} 文件:{1}'.format(e, file))
shutil.copy2(file, './error' + filename)
return False
row_nums = sheet.nrows
col_nums = sheet.ncols
page = False # 是否分几次插入
data = []
if row_nums < 2:
return False
if col_nums not in [23, 25]: # 两种excel格式,一个23列,一个25列
return False
for rownumber in range(1, row_nums):
if page is True:
data = []
values = sheet.row_values(rownumber)
values.insert(0, 0)
if values[1] == '':
return False
# 不同形式表格差异处理
if col_nums == 23:
values.insert(7, '')
values.insert(8, '')
if values[20] == '':
values[20] == '0000-00-00 00:00:00'
if values[21] == '':
values[21] = '0000-00-00 00:00:00'
data.append(tuple(values))
totals = len(data)
page = False
if totals >= 2000:
insert(data)
page = True
del data
insert(data)
return True
def insert(data):
"""
将excel表格所有数据一次插入到mysql中
"""
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="fahuo", use_unicode=True, charset="utf8")
c = db.cursor()
try:
c.executemany(
"""INSERT INTO `order` VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""",
data)
db.commit()
except Exception as e:
logging.info(e)
db.close()
return False
return True
if __name__ == "__main__":
logging.basicConfig(filename='./log.txt', level=logging.DEBUG)
path = './excel'
main(path)