最近做了一个项目,读取大量的本地大数据,格式为excel,到MySQL中,故此记录一下,代码如下,供朋友们参考

import pandas as pd
import pymysql
import time
import osbig_char_list=["图片五","图片四","图片三","图片二","图片一","用户反映"]
def create(table_name,sql_key):"""table:你需要创建的表sql_key:你想在表中创建的字段"""db = pymysql.connect(host="localhost",port=3306,user='',password='',db='testdb',charset='utf8mb4')  # 连接数据库# 更改自己的密码和testdb,这个很重要,等下表单创建好了可以在Navicat for MySQL中查询。cursor = db.cursor()# db.commit()cursor.execute("DROP TABLE IF EXISTS {}".format(table_name))# 建表之前先删掉以前的表。str_sql=[]for sk in sql_key:if sk in big_char_list:str_sql.append(sk+"  varchar(1000)")else:str_sql.append(sk+"  varchar(100)")sql_str=",\n".join(str_sql)#建表的sql语句,根据你自己的类型添加修改,# 不定长数据用varchar,# 比较确定长度的字段用char好一点,不要将char中的数字调太高# 记得,两处地方都要修改,否则数据存储会出现问题。#sql="CREATE TABLE usename"# sql="ALTER TABLE student ADD age INT(4)"sql = r"""CREATE TABLE {}({})ENGINE=InnoDB DEFAULT CHARSET=utf8mb4""".format(table_name, sql_str)
# 出现1064之类的错误,注意列命名:"You have an error in your SQL syntax; check the manual that corresponds
# to your MySQL server version for the right syntax to use near 'like varchar(100))
# ENGINE=InnoDB DEFAULT CHARSET=utf8mb4' at line 6")
#这里是重中之重,一般这里指定为CHARSET=utf8mb3,但是,你要插入的数据中如含有表情符号等,会报1366错误,因此要指定为utf8mb4,这样才能将表情符号插入。cursor.execute(sql)cursor.close()db.commit()db.close()def cut_insert_data(table_name, tupple_list):"""1、根据表结构自动生成插入语句2、一次性插入大量数据3、插入大量数据一定是tuple(元组)数据"""db = pymysql.connect(host="localhost",port=3306,user='',password='',db='testdb',charset='utf8mb4')cursor = db.cursor()cursor.execute("select * from {}".format(table_name))title_info = cursor.descriptiondict_keys = ','.join([ti[0] for ti in title_info])dict_list = ["%s"]*len(title_info)dict_values = ','.join('{0}'.format(x) for x in dict_list)sql = 'INSERT INTO {table}({keys}) VALUES ({values});'.format(table=table_name, keys=dict_keys, values=dict_values)# flag=20000# lc = len(tupple_list)//flag+1# for i in range(lc):#     st = i*flag# et = (i+1)*flag# insert(table_name, insert_data[st:et])cursor.executemany(sql, tupple_list)db.commit()cursor.close()db.close()def read_data(file):df = pd.read_excel(file, sheet_name="")#改为自己的sheetcolumns_list=list(df.columns)data_list = df.values.tolist()ld = len(data_list[0])insert_data = []for data in data_list:for i in range(ld):flag = str(data[i])if flag == "nan":data[i] = ""else:continueinsert_data.append(tuple(data))return insert_data,columns_listdef main(file):flag=30000table_name = file.split(".")[0]t1 = time.time()excel_path = filedata,sql_key = read_data(excel_path)t2 = time.time()create(table_name,sql_key)print("读取{}条数据用时{}".format(len(data), t2-t1))t1 = time.time()cut_insert_data(table_name, data)t2 = time.time()print("插入{}条数据用时{}".format(len(data), t2-t1))if __name__ == "__main__":ts=time.time()# list_dir=os.listdir()# excel_file=[ld for ld in list_dir if ld[-4:]=="xlsx"]excel_file=["dataxlsx"]for ef in excel_file:t1=time.time()main(ef)t2=time.time()print("读取存入该表用时{}".format(t2-t1))te=time.time()print("该项目用时{}秒".format(te-ts))

读取结果如图:

14万条数据22秒入库算是很快的了,应该还有优化的空间,有建议的朋友可以在评论区提出来。读取这边我用的pandas,还有可用openpyxl库进行,我印象中这个***openpyxl***是要快一点,但我代码1丢了,下面仅供大家参考。

def load_excel(file):t1=time.time()wb=openpyxl.load_workbook(file,read_only=True)table =wb["维修损失明细"]# rows=table.max_row# cols=table.max_column# row_datas=[]# Data=table.cell(row=1,column=2).value# Datadata=[]for row in table.iter_rows():rows=[]for cell in row:rows.append(cell.value)# rows=np.array(rows, dtype=np.float)data.append(rows)df= pd.DataFrame(data[1:],columns=data[0])t2=time.time()print("openpyxl读取数据用时{}".format(t2-t1))return df

python 读取excel 插入mysql相关推荐

  1. python读取excel生成mysql建表语句_python读取excel文件并自动在mysql中建表导数据

    """ 根据excel在mysql中建表(表名为文件名,字段为csv中的header,默认所有字段为varchar,如需更改,在数据库中更改即可),并插入数据 " ...

  2. python读取excel写入mysql pandas_python pandas 读取文件 写入文件excel

    读取数据 import pandas as pd import collections def readLocationCodeForExcel(): read_file = r"test. ...

  3. python读取excel写入数据库_python实现读取excel写入mysql的小工具详解

    Python是数据分析的强大利器 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python如何读取excel,并使 ...

  4. python与excel互通_【python】python vs Excel ( 与mysql数据库之间的交互)

    [python]python vs Excel ( 与mysql数据库之间的交互) 通过python与mysql数据库做交互 到目前为止大部分案例的演示数据都是基于文件进行读取的.那么python如何 ...

  5. python读取excel表格-python读取excel表格中的数据

    使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...

  6. vb.net读取excel并写入dgv_如何用Python读取Excel中的图片?然后写入图片?

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...

  7. 如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...

  8. python 读取excel图片_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

  9. 怎么用python读取excel图_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

最新文章

  1. Windows下MySQL安装
  2. python高性能服务器编写,Tornado的高性能服务器开发常用方法
  3. innodb_flush_log_at_trx_commit
  4. 关系型数据库和NOSQL的对比
  5. C# 获取鼠标相对当前窗口坐标的方法
  6. Qt的json对象不具备类似指针、引用的行为导致的更新不成功问题解决
  7. 技术专题:厦门9月30日限制路由(网络尖冰),WAYOS或ROS解决方案
  8. python动态导入模块_Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析...
  9. PHP+MYSQL+SCWS 做自己的站内搜索引擎
  10. 【PMP认证考试感悟】走向管理的开始
  11. 家庭NAS方案-树莓派安装使用OpenMediaVault
  12. 观念理解论创业设计思维
  13. 钉钉、飞书、企业微信,还没学会赚钱
  14. 白狐微信公众号编辑器CMS系统源码
  15. Nginx --sendfile配置
  16. macOS 动态桌面
  17. 关于lichong_87的外键级联更新-延迟检查和触发器的实现一点补充
  18. c++ 读取csv文件格式点云
  19. put url带参数_问题回答:Http 请求的Post 和Put 的区别
  20. 通信原理 | 虚数j的物理意义

热门文章

  1. elementui中的el-col组件怎么用
  2. 开发技术前线 第六期
  3. numpy.mat()
  4. com.alibaba.fastjson 序列化 反序列
  5. 如何做一个基于python校园教室图书馆座位预约系统毕业设计毕设作品(Django框架)
  6. 软件体系结构复习整理
  7. 安卓手机的指纹按钮做成苹果的Home键
  8. 哈尔滨一居民家发生爆炸 造成1人死亡(图)
  9. 4万字c++讲解+区分c和c++,不来可惜了(含代码+解析)
  10. Tableau制作瀑布图太简单了