小言_互联网的博客

用python将excel快速导入mysql,10万数据2秒内导入

391人阅读  评论(0)

一、导入步骤:

① 在mysql建立excel对应的字段的table;
② python在每次导入前会将table数据清空(也可以删除);
③ 用python将excel打开逐条导入mysql;

二、导入代码:

① 连接数据库:

def mysql_link(de_name):
try:
db = pymysql.connect(host=“localhost”, user=“root”,
passwd=“hjzx123”,
db=de_name,
charset=‘utf8mb4’)
return db
except:
print(“could not connect to mysql server”)

② 打开excel:

def open_excel(excel_file):
try:
book = xlrd.open_workbook(excel_file) # 文件名,把文件与py文件放在同一目录下
print(sys.getsizeof(book))
return book
except:
print(“open excel file failed!”)

③ 连接数据库,打开表格导入数据:

def store_to(db_name, table_name, excel_file):
db = mysql_link(db_name) # 打开数据库连接
cursor = db.cursor() # 使用 cursor() 方法创建一个游标对象 cursor
query = "truncate table " + table_name
cursor.execute(query)
print(table_name+‘已清空’)
book = open_excel(excel_file) # 打开excel文件
sheets = book.sheet_names() # 获取所有sheet表名
for sheet in sheets:
sh = book.sheet_by_name(sheet) # 打开每一张表
row_num = sh.nrows
print(row_num)
list = [] # 定义列表用来存放数据
num = 0 # 用来控制每次插入的数量
for i in range(2, row_num): # 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1
row_data = sh.row_values(i) # 按行获取excel的值
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], row_data[16],row_data[17], row_data[18], row_data[19], row_data[20])
list.append(value) # 将数据暂存在列表
num += 1
if( num>= 10000 ): # 每一万条数据执行一次插入
print(sys.getsizeof(list))
sql = “INSERT INTO " + table_name + " (jj,工号,电话类型,客户电话,客户姓名,客户分群,客户编码,tt,IVR一级按键,IVR二级按键,zz,IVR三级按键,开始时间,结束时间,通话时长,来电内容,业务范围,客户来电区域,实际业务类型,评价,挂机类别 )VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)”
cursor.executemany(sql, list) # 执行sql语句

            num = 0  # 计数归零
            list.clear()  # 清空list
            print("worksheets: " + sheet + " has been inserted 10000 datas!")
            
sql = "INSERT INTO " + table_name + " (jj,工号,电话类型,客户电话,客户姓名,客户分群,客户编码,tt,IVR一级按键,IVR二级按键,zz,IVR三级按键,开始时间,结束时间,通话时长,来电内容,业务范围,客户来电区域,实际业务类型,评价,挂机类别 )VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
cursor.executemany(sql, list)  # 执行sql语句
print("worksheets: " + sheet + " has been inserted " + str(row_num) + " datas!")
db.commit()  # 提交
cursor.close()  # 关闭连接
db.close()

最后,设定导入excel的路径和数据库table的名称,实现一键导入,数据是每1万条导入数据库,快速有效,具体操作有什么不懂,可以关注微信公众号(慧眼看古今)进行沟通

另外,完整的数据代码地址:https://download.csdn.net/download/weixin_43509595/11826876


转载:https://blog.csdn.net/weixin_43509595/article/details/101532800
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场