前两天一直想把1400多个excel文件导入到数据库中,上网搜索一直没找到对应的代码,大多是一个excel文件中多个表单的批量导入。作为小白的我试了很多次,终于在东拼西凑中写出来了一个比较实用的代码。每个文件大概有3000多条数据,每个文件大概3秒左右传输完成。
话不多说先上代码
import pymysql
import name
import xlrd
# 打开数据库连接 地址 用户名 密码 数据库名称
db = pymysql.connect("localhost", "root", "123456", "testdata")
#数据库操作语句,按需更改
query = """INSERT INTO 表的名称 ( 数据库表的表头,后面%s与表头个数相配 ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
#给个例子:
#query = """INSERT INTO student (no, name, sex, age) VALUES (%s, %s, %s, %s)"""
#导入文件文件名
filename = name.name2
for name in filename:
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
wb = xlrd.open_workbook(name)
print('read ' + name)
ws = wb.sheet_by_name('Sheet1')
max_row = ws.nrows
list = []
num = 0
for i in range(2, max_row):#去除标题行逐条读取数据
row_data = ws.row_values(i)
# 可根据需要删除不需要的列
value = (row_data[0], row_data[1], row_data[2], row_data[3], row_data[4], row_data[5], row_data[6], row_data[7],
row_data[8], row_data[9], row_data[10], row_data[11], row_data[12], row_data[13], row_data[14], row_data[15])
#将value的数据存在list中
list.append(value)
num += 1
# 超过1000条数据,转存一次。可根据需要设置比如100、10000...
if(num >= 1000):
cursor.executemany(query, list)
num = 0
list.clear()
print('1000-done')
cursor.executemany(query, list)
cursor.close()
db.commit()
db.close()
print("-Done-")
解释说明
1.需要先把文件名以python字典形式保存在.py文件内中,使用时import一下。
我这里命名为name.py分为两个组name1、name2。
将文件划分为两块方便测试。读取文件名的具体方法可上网去搜索,挺好搜索的,也是用python做的;命名分组直接自己加上name1、name2就行了。
name
是上面提到的字典文件名。
import pymysql
import name
import xlrd
2.第一个for循环,循环读取name.py文件中name1,name2数据。
可在 存放excel文件的文件夹中 新建.py文件并先运行下列代码。检验name.py文件是否有错误、程序是否能正确读取excel文件。最好filename=name.name1
和filename=name.name2
都过一遍。
import name
import xlrd
filename = name.name2
for name in filename:
wb = xlrd.open_workbook(name)
print('read ' + name)
ws = wb.sheet_by_name('Sheet1')
max_row = ws.nrows
print(max_row)
第2个for循环,循环读表格中数据
value中可选取想要读取的列的值,比如:不想读取第一列的值可把row_data[0]
删除。
import name
import xlrd
filename = name.name1
for name in filename:
wb = xlrd.open_workbook(name)
print('read ' + name)
ws = wb.sheet_by_name('Sheet1')
max_row = ws.nrows
print(max_row)
for i in range(2, max_row):#填入取值行列
row_data = ws.row_values(i)
# 可根据需要删除不需要的列
value = (row_data[0], row_data[1], row_data[2], row_data[3], row_data[4], row_data[5], row_data[6], row_data[7],
row_data[8], row_data[9], row_data[10], row_data[11], row_data[12], row_data[13], row_data[14], row_data[15])
#将value的数据存在list中
list.append(value)
print(list)
3.连接MySQL并写入数据
这就是最后一步了,参照第一段代码。在这之前需要在mysql中设计好表的结构。
最后,希望大家多多指教。