python 读取excel 插入mysql
最近做了一个项目,读取大量的本地大数据,格式为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相关推荐
- python读取excel生成mysql建表语句_python读取excel文件并自动在mysql中建表导数据
""" 根据excel在mysql中建表(表名为文件名,字段为csv中的header,默认所有字段为varchar,如需更改,在数据库中更改即可),并插入数据 " ...
- python读取excel写入mysql pandas_python pandas 读取文件 写入文件excel
读取数据 import pandas as pd import collections def readLocationCodeForExcel(): read_file = r"test. ...
- python读取excel写入数据库_python实现读取excel写入mysql的小工具详解
Python是数据分析的强大利器 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python如何读取excel,并使 ...
- python与excel互通_【python】python vs Excel ( 与mysql数据库之间的交互)
[python]python vs Excel ( 与mysql数据库之间的交互) 通过python与mysql数据库做交互 到目前为止大部分案例的演示数据都是基于文件进行读取的.那么python如何 ...
- python读取excel表格-python读取excel表格中的数据
使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...
- vb.net读取excel并写入dgv_如何用Python读取Excel中的图片?然后写入图片?
大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...
- 如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?
大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...
- python 读取excel图片_如何用Python读取Excel中图片?
公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...
- 怎么用python读取excel图_如何用Python读取Excel中图片?
公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...
最新文章
- Windows下MySQL安装
- python高性能服务器编写,Tornado的高性能服务器开发常用方法
- innodb_flush_log_at_trx_commit
- 关系型数据库和NOSQL的对比
- C# 获取鼠标相对当前窗口坐标的方法
- Qt的json对象不具备类似指针、引用的行为导致的更新不成功问题解决
- 技术专题:厦门9月30日限制路由(网络尖冰),WAYOS或ROS解决方案
- python动态导入模块_Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析...
- PHP+MYSQL+SCWS 做自己的站内搜索引擎
- 【PMP认证考试感悟】走向管理的开始
- 家庭NAS方案-树莓派安装使用OpenMediaVault
- 观念理解论创业设计思维
- 钉钉、飞书、企业微信,还没学会赚钱
- 白狐微信公众号编辑器CMS系统源码
- Nginx --sendfile配置
- macOS 动态桌面
- 关于lichong_87的外键级联更新-延迟检查和触发器的实现一点补充
- c++ 读取csv文件格式点云
- put url带参数_问题回答:Http 请求的Post 和Put 的区别
- 通信原理 | 虚数j的物理意义
热门文章
- elementui中的el-col组件怎么用
- 开发技术前线 第六期
- numpy.mat()
- com.alibaba.fastjson 序列化 反序列
- 如何做一个基于python校园教室图书馆座位预约系统毕业设计毕设作品(Django框架)
- 软件体系结构复习整理
- 安卓手机的指纹按钮做成苹果的Home键
- 哈尔滨一居民家发生爆炸 造成1人死亡(图)
- 4万字c++讲解+区分c和c++,不来可惜了(含代码+解析)
- Tableau制作瀑布图太简单了