使用Python将Excel中的数据导入到MySQL

使用python将Excel中的数据导入到Mysql中

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, ‘‘)),解决方法有两种:

  1. 将pymysql.connect放到函数中
  2. 在try中加入conn.ping(reconnect=True),保证conn丢失时自动重连
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)

参考文章:

  1. https://blog.csdn.net/qq_35350265/article/details/102892506
    2.https://www.runoob.com/python3/python3-mysql.html

你可能感兴趣的:(记录)