m0_46401724 2022-04-02 16:42 采纳率: 0%
浏览 37

excel的数据自动同步到MySQL后的数据怎么覆盖之前同步的数据,python代码

##如下是知乎的代码
##链接 如何将excel数据导入数据库(mysql)且能自动更新? - 大毛毛的回答 - 知乎https://www.zhihu.com/question/60087141/answer/2300600361
##该代码用于excel自动同步到MySQL,已经可以成功实现,但是不能覆盖之前的已经同步过来的数据,所以想改一下代码实现覆盖数据的功能。

import pymysql
import pandas as pd
import os
import time
from datetime import datetime
 
file_name = []
dir_name = []
def get_file(file_dir):
    for parent, dirnames, filenames in os.walk(file_dir):
        # 第一个参数是文件夹路径,第二个参数是文件名,第三个参数是文件夹
        for filename in filenames:
            a = os.path.join(parent, filename)
            file_name.append(a)
 
        for dirname in dirnames:
            b = os.path.join(parent, dirname)
            dir_name.append(b)
            # 文件夹名
    return file_name
def pro(path):
    #获取excel文件对象
    date_xls = pd.ExcelFile(path)
    # print(date_xls)
    #for循环遍历所读excel中的sheet
    for sheetname in date_xls.sheet_names:
        #将sheet数据读取为dataframe
        df=pd.DataFrame(pd.read_excel(open(path,'rb'),sheet_name=sheetname))
        df=df.fillna(0)
        #将dataframe转为元组列表数据,execute函数导入mysql用
        pro1=df.apply(lambda x:tuple(x),axis=1).values.tolist()
        # print(pro1)
        #读取字段名,同时将列表格式转为字符串格式
        cl=df.columns.tolist()
        #计算字段个数
        b=df.columns.size
        #计算行数
        c=df.shape[0]
        #计算列数
        l=df.shape[1]
        #设置空字符串
        zhanweifu = ""
        clname =""
        #将字符串拼接,实现需要的SQL语句,此处需注意"`"是键盘ESC下方的按键
        for i in range(0, b - 1):
            zhanweifu = zhanweifu + "%s,"
            clname=clname+"`"+str(cl[i])+"`"+","
        zhanweifu = zhanweifu + "%s"
        clname=clname+"`"+str(cl[b-1])+"`"
        sheetname="`"+sheetname+"`"
        # 游标方法
        
        conn = pymysql.connect(host="localhost",user="root",password="123456",db="mysql",port=3306,charset='utf8')
 
        # 获取游标
        cs = conn.cursor()
        #注意点:excel中的sheet名必须与mysql中的表名一致,sheet字段名必须与mysql表名一致
        sql = "insert into " +sheetname + "(" + clname + ")" + " values" + "(" + zhanweifu + ")"
 
        # print(sql)
        try:
            #批量插入
            cs.executemany(sql,pro1)
            conn.commit()
        except UnicodeEncodeError:
            print('插入failed')
            conn.rollback()
        finally:
            conn.close()
 
            print('退出')
 
if __name__ == '__main__':
    # 调用函数
    #返回文件夹中所有excel文件名
    get_file(r'C:\Users\86185\Desktop\TJ_Morningmeeting\自动导入')
    Now_time=datetime.now()
    Now_date=Now_time.day
    while True:
        if Now_time.minute>1:
            #for循环将所有excel的所有sheet批量导入
            for i in file_name:
                pro(i)
            Now_date=Now_date+1
        time.sleep(60)
```python


```

  • 写回答

1条回答 默认 最新

  • 关注

    要实现修改功能,必须有个字段的值是唯一的,导入之前判断唯一值是否存在,存在则更新,不存在则修改。

    评论

报告相同问题?

问题事件

  • 修改了问题 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 visa版本没问题,串口调试助手调试串口正常使用,但是labview刷新不出来
  • ¥15 java MQTT SSL证书
  • ¥20 求一个手机号或者Wxid转微信号的工具
  • ¥20 msconfig开启安全引导后重启电脑黑屏
  • ¥15 对email表单做了一般邮箱正则校验,现在需要额外输入为hotmail或outlook、gmail时做特定邮箱校验,不符合提示出来。并且保证不影响其他正确的邮箱格式通过校验,通过不会提示。
  • ¥20 Win11,bitblocker密钥恢复失败
  • ¥15 stm32 cubemx配置sdram,初始化后无法读写sdram
  • ¥100 上位机到dtu再到485继电器模块 目前结束命令有百分之2左右概率执行失败求指导
  • ¥15 ifcopenshell库在vs2019下的配置
  • ¥15 whql认证的windows硬件开发者账号个人验证不匹配问题