当前位置: 首页 > news >正文

python读取excel数据写入mysql

概述

业务中有时会需要解析excel中的数据,按照要求处理后,写入到db中;
python处理这个正好简便快捷

demo

没有依赖就 pip install pymysql一下

import pymysql
from pymysql.converters import escape_string
from openpyxl import load_workbook
from Snowflake import Snowflakedef load_excel_data(snowflake):# 连接到MySQL数据库mydb = pymysql.connect(host="xxx.xxx.xxx.xxx",port=3306,user="xxx",passwd="xxx",db="xxxx")# 打开Excel文件wb = load_workbook(filename=r'D:\xx\test.xlsx')sheet = wb.active# 获取表头header = [cell.value for cell in sheet[1]]column_header = []# 表头转换列名for excel_head_name in header:if '11' == excel_head_name:column_header.append("xx")elif '22' == excel_head_name:column_header.append("xx")elif '33' == excel_head_name:column_header.append("xx")elif '1122' == excel_head_name:column_header.append("xx")# 遍历每一行数据,并将其插入到数据库中cursor = mydb.cursor()count = 0defaultUser = "'xxx'"for row in sheet.iter_rows(min_row=2, values_only=True):cId = snowflake.next_id()date = row[0]# datetime 转 datedate = date.date()a2 = row[1]reason = row[2]detail = row[3]# \'%s\' 将含有特殊内容的字符串整个塞进去sql = f"INSERT INTO test_table (id, store_id, num, handler, create_by, update_by, date, a2, reason, detail) VALUES ({cId}, 3, 0, 43, {defaultUser}, {defaultUser}, \'%s\', \'%s\', \'%s\', \'%s\')" % (date, self_escape_string(a2), self_escape_string(reason), self_escape_string(detail))print(sql)# cursor.execute(sql, row)cursor.execute(sql)count += 1print(f"正在插入{count}条数据")# 提交更改并关闭数据库连接mydb.commit()cursor.close()mydb.close()# 将字符串中的特殊字符转义
# python中没有null只有None
def self_escape_string(data):if data is None:return ""return escape_string(data)if __name__ == '__main__':worker_id = 1data_center_id = 1snowflake = Snowflake(worker_id, data_center_id)load_excel_data(snowflake)

雪花id生成主键

import time
import randomclass Snowflake:def __init__(self, worker_id, data_center_id):### 机器标识IDself.worker_id = worker_id### 数据中心IDself.data_center_id = data_center_id### 计数序列号self.sequence = 0### 时间戳self.last_timestamp = -1def next_id(self):timestamp = int(time.time() * 1000)if timestamp < self.last_timestamp:raise Exception("Clock moved backwards. Refusing to generate id for %d milliseconds" % abs(timestamp - self.last_timestamp))if timestamp == self.last_timestamp:self.sequence = (self.sequence + 1) & 4095if self.sequence == 0:timestamp = self.wait_for_next_millis(self.last_timestamp)else:self.sequence = 0self.last_timestamp = timestampreturn ((timestamp - 1288834974657) << 22) | (self.data_center_id << 17) | (self.worker_id << 12) | self.sequencedef next_id(self):timestamp = int(time.time() * 1000)if timestamp < self.last_timestamp:raise Exception("Clock moved backwards. Refusing to generate id for %d milliseconds" % abs(timestamp - self.last_timestamp))if timestamp == self.last_timestamp:self.sequence = (self.sequence + 1) & 4095if self.sequence == 0:timestamp = self.wait_for_next_millis(self.last_timestamp)else:self.sequence = 0self.last_timestamp = timestampreturn ((timestamp - 1288834974657) << 22) | (self.data_center_id << 17) | (self.worker_id << 12) | self.sequencedef wait_for_next_millis(self, last_timestamp):timestamp = int(time.time() * 1000)while timestamp <= last_timestamp:timestamp = int(time.time() * 1000)return timestamp
http://www.lryc.cn/news/350253.html

相关文章:

  • flutter日期选择器仅选择年、月
  • 素数筛详解c++
  • 【Python超详细的学习笔记】Python超详细的学习笔记,涉及多个领域,是个很不错的笔记
  • TINA 使用教程
  • weblogic 任意文件上传 CVE-2018-2894
  • 我的第一个网页:武理天协
  • 机器学习笔记 KAN网络架构简述(Kolmogorov-Arnold Networks)
  • 基于网络爬虫技术的网络新闻分析(二)
  • Java--初识类和对象
  • SpringBoot如何实现动态数据源?
  • win10安装mysql8.0+汉化
  • 全网最全的Postman接口自动化测试!
  • Spring:了解@Import注解的三种用法
  • 简要介绍三大脚本语言 Shell、Python 和 Lua
  • 第 397 场 LeetCode 周赛题解
  • 文件存储解决方案-阿里云OSS
  • 基于Java的飞机大战游戏的设计与实现(论文 + 源码)
  • Vue路由开启步骤
  • 【碎片知识】2024_05_15
  • 彩虹聚合DNS管理系统
  • 服务网格 SolarMesh v1.13 重磅发布
  • 三大平台直播视频下载保存方法
  • OpenAI GPT-4o - 介绍
  • QTreeView学习 branch 虚线设置
  • C++ 日志库 log4cpp 编译、压测及其范例代码 [全流程手工实践]
  • python数据处理与分析入门-pandas使用(4)
  • 操作系统-单片机进程状态问题(三态模型问题)
  • Linux文件:重定向底层实现原理(输入重定向、输出重定向、追加重定向)
  • 波搜索算法(WSA)-2024年SCI新算法-公式原理详解与性能测评 Matlab代码免费获取
  • 洛谷P1364 医院设置