首页 > 数据库 >PYTHON实现EXCEL数据导入MYSQL

PYTHON实现EXCEL数据导入MYSQL

时间:2023-11-24 15:23:06浏览次数:44  
标签:name PYTHON EXCEL filename cursor file MYSQL print table

# coding=utf8
import pymysql
import os
import pandas as pd

host='127.0.0.1'
port=3308
user='root'
password='*****'
db='impairment_testing'

conn=pymysql.connect(host=host,port=port,user=user,password=password,db=db)
cursor=conn.cursor()

# 指定拟导入EXCEL文件路径,根据需要更换路径。
file_path=r'C:\Users\user\Desktop\ModelDesigning\impairment_testing\excel_data'

files=[]
table_names=[]
for filename in os.listdir(file_path):
    if filename.endswith((".xlsx") or filename.endswith(".xls")): #确保是Excel文件
        file=os.path.join(file_path,filename)
        table_names.append(os.path.splitext(filename)[0])
        files.append(file)
# print(files)
print(table_names)

#构建数据表结构,结构与需要导入的EXCEL文件保持一致!!!
table_data = [
    {
        "table_name": table_names[0],
        "columns": [
            {"name": "date", "type": "DATE"},
            {"name": "price", "type": "DECIMAL(10,2)"},
        ]
    },
    {
        "table_name": table_names[1],
        "columns": [
            {"name": "date", "type": "DATE"},
            {"name": "value", "type": "DECIMAL(10,0)"},
        ]
    },
]

# 遍历列表,根据表名和列名创建表和列
for table in table_data:
    table_name = table["table_name"]
    columns = ", ".join([f"{col['name']} {col['type']}" for col in table["columns"]])
    #先删除原有数据表
    drop_table=f'drop table if exists {table_name} '
    creat_table_query = f"""        
        CREATE TABLE {table_name}(  
            {columns}  
        )  
    """
    cursor.execute(drop_table)
    cursor.execute(creat_table_query)

    # cursor.execute(f"SHOW TABLES LIKE '{table_name}'")
    # # 判断表是否存在
    # if cursor.fetchone():
    #     print(f"Table {table_name} exists")
    # # 如果不存在则创建表
    # else:
    #     cursor.execute(creat_table_query)
    #     print(f"Table {table_name} created.")

for file in files:
    filename = os.path.basename(file)  # 获取文件名,即表名,文件名与表名必须保持一致。

    # 检查文件名的后缀名
    suffix = filename.split('.')[-1]

    # 根据后缀名来决定如何截取文件名以获取表名
    if suffix == 'xlsx':
        table_name = filename[:-5]  # 如果是.xlsx,去掉".xlsx"后缀
    elif suffix == 'xls':
        table_name = filename[:-4]  # 如果是.xls,去掉".xls"后缀
    else:
        print(f"Unknown file format: {filename}")  # 如果不是.xlsx或.xls,打印错误信息

    # print(table_name)

    df = pd.read_excel(file)  # 读取Excel文件的数据到DataFrame中
    # print(df)
    # df.to_sql(table_name,con=conn,if_exists='replace',index=False) #要求conn必须是sqlAlchemy引擎,弃用。

    #通过遍历df行列形式将EXCEL数据导入MYSQL
    for index,row in df.iterrows():
        values=[row[col] for col in df.columns]# 构建要插入的值的列表
        # print(values)
        sql = f"INSERT INTO {table_name} VALUES ({','.join(['%s' for _ in df.columns])});"  # SQL语句,用于导入数据到对应的表中,注意修改分隔符以匹配你的数据格式
        # print(sql)
        cursor.execute(sql,values)  # 执行SQL语句,导入数据到对应的表中
    # sql = "INSERT INTO brent_price (date0,price) VALUES ('2023-8-1',80);"
    # cursor.execute(sql)  # 执行SQL语句,导入数据到对应的表中
    print(f"Data loaded into table {table_name}")

conn.commit()
cursor.close()
conn.close()

1. EXCEL文件名与数据表同名,结构保持一致。

标签:name,PYTHON,EXCEL,filename,cursor,file,MYSQL,print,table
From: https://www.cnblogs.com/chiemn/p/17853813.html

相关文章

  • python用playwright自动化测试程序打包exe
    playwright自动化测试代码写好后,打包为exe运行在目标PC上可能出现错误。原因:1、运行的PC没有响应的浏览器。2、playwright没有打包到代码中。所以本例用AutoPytoExe为例来制作exe程序解决问题。1、安装: 2、安装完成之后,我们就可以输入:auto-py-to-exe,来启动auto-py-to-exe......
  • python中的虚拟环境
    虚拟环境介绍:虚拟环境是一种在项目级别隔离Python依赖的方法。通过创建虚拟环境,你可以为每个项目设置独立的Python环境,从而解决全局安装可能导致的问题。虚拟环境可以包含自己的Python解释器和依赖库,与其他虚拟环境和系统环境隔离开。虚拟环境使用场景:项目隔离:当您需要......
  • 5.mysql8.0以上版本,ProxySQL 监控/连接账户,要以 mysql_native_password 形式创建,否则
    CREATEUSER'monitor'@'%'IDENTIFIEDBY'123456';grantallprivilegeson*.*to'monitor'@'%'withgrantoption;flushprivileges; ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_pa......
  • Python常见文件读写方法有哪些?
    在Python中,文件读写是非常常见的操作之一,因此提供了多种文件读写模式以及文件读写方法。那么Python常见文件读写方法有哪些?具体请看下文。文件读写模式在Python中,文件读写模式是指打开文件时使用的模式。Python提供了多种文件读写模式,包括:①读模式("r"):以只读方式......
  • Python 数据类型
    Task2数据类型常用内置类型基本的数据类型整数Integer(int)浮点数Float布尔值Boolean(bool)类型Type坦白来说,type是一种面向类的对象,python是一种面向的对象友好的语言print(type(2)) #int型print(type(2.3)) #float型的print(type(2>2.3)) #bool型......
  • Python 变量与函数
    Task3变量与函数变量变量是一个名字,他所指的是一段数据使用=来对这段区域进行复制x=5print(x)print(x*2)新的值会覆盖旧的值新的值的数据类型不必与旧的值的数据类型相同y=10print(y-2)y=Trueprint(y)运行结果:变量命名规则:必须以字母或者下划......
  • Excel表格函数公式出现溢出怎么办?
    Excel是一款广泛使用的电子表格软件,它可以帮助我们进行各种计算、数据分析与处理等操作。在使用Excel时,我们通常需要使用到各种函数公式来完成不同的任务。然而,在使用函数公式时有时会出现“溢出”(Overflow)的问题,这个问题会导致计算结果不正确,甚至无法计算。那么,Excel表格函数公式......
  • Excel表格存在不同大小的合并单元格怎么排序?
    当Excel表格中存在不同大小的合并单元格时,进行排序可能会出现一些难题。因为合并单元格会影响数据的布局,导致排序结果不符合预期。下面我将详细介绍如何在包含不同大小合并单元格的Excel表格中进行排序,希望对您有所帮助。1.确定排序规则在进行排序之前,首先需要明确排序的规则......
  • 使用golang写一个导出excel的接口
    Craftedby[Genie](https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode)You使用golang写一个导出excel的接口Genie要创建一个使用Go语言编写的导出Excel文件的接口,我们需要做几个步骤:安装依赖:我们将使用excelize库来创建和操作Excel文件。......
  • python 题目:数字比较。
    #!/usr/bin/python#-*-coding:UTF-8-*- if __name__ == '__main__':  i = 10  j = 20   if i > j:     print ('%d大于%d' % (i,j))   elif i == j:     print ('%d等于%d' % (i,j))   elif i < j:   ......