1.使用sqlalchemy模块,直接将整个Excel表格导入到Mysql中,简单粗暴,代码如下:
from sqlalchemy import create_engine
#将Excel表格中的数据放到MySQL中
path = r'G:\数据集\记录信息(10月).xls'
data=pd.read_excel(path)
#这里是对data.columns进行处理
list = data.columns
new_list = []
for x in list:
new_list.append(''.join(x.split()))
data.columns=new_list
# create_engine就是去建立连接,相当于我们pymsql建立连接的时候 conn= pymysql.connect(...)
# conn = create_engine(
# "mysql+pymysql://root:123abc@localhost:3306/数据库名?charset=utf8mb4",
# max_overflow=0, # 超过连接池大小外最多创建的连接数
# pool_size=5, # 连接池大小
# pool_timeout=30, # 连接池中没有线程最多等待时间,否则报错
# pool_recycle=-1, # 多久之后对连接池中的连接进行回收(重置)-1不回收
# )
engine = create_engine('mysql+pymysql://root:root@localhost:3306/database?charset=utf8')
#if_exists三个模式:fail,若表存在,则不输出;replace:若表存在,覆盖原来表里的数据;append:若表存在,将数据写到原表的后面。默认为fail
sql_chengfen = data.to_sql(name='jilvinform_10', con=engine, index=False,if_exists='replace')
2.第二种方法是利用pymysql模块,代码如下,其中函数ExcelToMysql是导入,函数readTable(cursor)是导出展示。
import pymysql
import pandas as pd
from openpyxl.reader.excel import load_workbook
import xlrd
path = r'E:\desktop\数据.xlsx'
def ExcelToMysql(cur, path):
num = 1
# 读取excel文件
workbook = load_workbook(path)
# 获得所有工作表的名字
sheets = workbook.get_sheet_names()
# 获得第一张表
worksheet = workbook.get_sheet_by_name(sheets[0])
# 将表中每一行数据读到sqlstr数组中
for row in worksheet.rows:
if num == 1:
num += 1
continue
sqlstr = []
for cell in row:
sqlstr.append(cell.value)
valuestr = [str(sqlstr[0]), float(sqlstr[1]), int(sqlstr[2]), float(sqlstr[3]),
float(sqlstr[4]), float(sqlstr[5]), float(sqlstr[6]),float(sqlstr[7])]
# 将每行数据存到数据库中
cur.execute("insert into yuanliaobiao_10(熔炼号,铁水,温度,废钢,碳,硅,磷,生铁)"
" VALUES(%s, %s, %s, %s, %s, %s, %s, %s)",
valuestr)
# 输出展示数据库中的内容
def readTable(cursor):
# 选择全部
cursor.execute("select * from yuanliaobiao_10")
# 获得返回值, 返回多条记录, 若没有结果则返回
results = cursor.fetchall()
for i in range(0, results.__len__()):
for j in range(0, 8):
print(results[i][j], end='\t')
print('\n')
if __name__ == '__main__':
# 与数据库建立连接
conn = pymysql.connect(host='localhost', user='root', password='root', database='ronglianbiao',
port=3306, charset='utf8')
# 创建游标链接
cur = conn.cursor()
sql = "CREATE TABLE yuanliaobiao_10( \
熔炼号 CHAR(255), \
铁水 FLOAT, \
温度 INT, \
废钢 FLOAT,\
碳 FLOAT,\
硅 FLOAT,\
磷 FLOAT,\
生铁 FLOAT)"
# 如果存在这个表则删除
cur.execute("drop table if exists yuanliaobiao_10")
# 创建表
cur.execute(sql)
# 将excel中的数据导入数据库中
ExcelToMysql(cur, path)
# 关闭游标链接
cur.close()
# 提交到数据库执行
conn.commit()
# 关闭数据库服务连接, 释放内存
conn.close()
#查看MySQL中的数据
# conn = pymysql.connect(host='localhost', user='root', password='root', database='ronglianbiao',
# port=3306, charset='utf8')
# cur = conn.cursor()
# readTable(cur)
当在函数中加入try…except…时,可能会出现连接断开的问题(pymysql.err.InterfaceError: (0, ‘‘)),解决方法有两种:
def importExcelToMysql(conn,cur,path):
num = 1
# 读取excel文件
workbook = load_workbook(path)
# 获得所有工作表的名字
sheets = workbook.get_sheet_names()
# 获得第一张表
worksheet = workbook.get_sheet_by_name(sheets[0])
# # 与数据库建立连接
# conn = pymysql.connect(host='localhost', user='root', password='root', database='ronglianbiao',
# port=3306, charset='utf8')
# # 创建游标链接
# cur = conn.cursor()
#
# sql = "CREATE TABLE yuanliaobiao_10( \
# 熔炼号 CHAR(255), \
# 铁水 FLOAT, \
# 温度 INT, \
# 废钢 FLOAT,\
# 碳 FLOAT,\
# 硅 FLOAT,\
# 磷 FLOAT,\
# 生铁 FLOAT)"
# # 如果存在这个表则删除
# cur.execute("drop table if exists yuanliaobiao_10")
# # 创建表
# cur.execute(sql)
# 将表中每一行数据读到sqlstr数组中
for row in worksheet.rows:
if num == 1:
num += 1
continue
sqlstr = []
for cell in row:
sqlstr.append(cell.value)
valuestr = [str(sqlstr[0]), float(sqlstr[1]), int(sqlstr[2]), float(sqlstr[3]),
float(sqlstr[4]), float(sqlstr[5]), float(sqlstr[6]),float(sqlstr[7])]
try:
conn.ping(reconnect=True)
# 将每行数据存到数据库中
cur.execute("insert into yuanliaobiao_10(熔炼号,铁水,温度,废钢,碳,硅,磷,生铁)"
" VALUES(%s, %s, %s, %s, %s, %s, %s, %s)",
valuestr)
# 提交到数据库执行
conn.commit()
except:
# 如果发生错误则回滚
conn.rollback()
# 关闭数据库连接
conn.close()
# 与数据库建立连接
conn = pymysql.connect(host='localhost', user='root', password='root', database='ronglianbiao',
port=3306, charset='utf8')
# 创建游标链接
cur = conn.cursor()
sql = "CREATE TABLE yuanliaobiao_10( \
熔炼号 CHAR(255), \
铁水 FLOAT, \
温度 INT, \
废钢 FLOAT,\
碳 FLOAT,\
硅 FLOAT,\
磷 FLOAT,\
生铁 FLOAT)"
# 如果存在这个表则删除
cur.execute("drop table if exists yuanliaobiao_10")
# 创建表
cur.execute(sql)
importExcelToMysql(conn,cur,path)
参考文章:
- https://blog.csdn.net/qq_35350265/article/details/102892506
2.https://www.runoob.com/python3/python3-mysql.html