前两天一直想把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就行了。

python批量将列表写入orcle数据库 python批量导入数据_excel


name是上面提到的字典文件名。

import pymysql
import name
import xlrd

2.第一个for循环,循环读取name.py文件中name1,name2数据。
可在 存放excel文件的文件夹中 新建.py文件并先运行下列代码。检验name.py文件是否有错误、程序是否能正确读取excel文件。最好filename=name.name1filename=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中设计好表的结构。

最后,希望大家多多指教。