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

用python实现将csv文件数据插入到mysql

用python实现将csv文件数据插入到mysql

import pymysql#1.连接数据库
# db= pymysql.connect(host='localhost',user='root',password='root',database='mysql')
import pandas as pd
from sqlalchemy import create_engine
import mathdef csv_to_mysql_chunked(csv_file, host, user, password, database, table_name, chunk_size=10000):"""分块导入大CSV文件到MySQLArgs:csv_file: CSV文件路径host: MySQL主机地址user: MySQL用户名password: MySQL密码database: 数据库名table_name: 表名chunk_size: 每次处理的行数"""# 1.创建用于连接数据库的引擎engineengine = create_engine(f'mysql+mysqlconnector://{user}:{password}@{host}/{database}')# 2.打开文件并计算总行数# 2.1. open(csv_file, 'r'):打开指定的CSV文件以供读取(返回一个文件对象,可以迭代文件中的每一行) # 加载文件(这段代码的作用是打开一个 CSV 文件并以只读模式进行访问。)# 2.2. for row in open(csv_file, 'r') :遍历文件对象,每次迭代获取文件中的一行内容(row 变量代表文件中的每一行)# 2.3. 1 for row in open(csv_file, 'r'): 这是一个生成器表达式(对于文件中的每一行,生成数字1)# 2.4.  sum(1 for row in open(csv_file, 'r')): sum() 函数计算生成器表达式产生的所有1的总和(实际效果是统计文件的总行数)# 2.5.举例子:# squares = [1 for x in range(10)] # print(squares)  # 结果[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]total_rows = sum(1 for row in open(csv_file, 'r')) - 1  # 减去标题行#这段代码的作用是打开一个 CSV 文件并以只读模式进行访问。print(f"总行数: {total_rows}")# 3.按设定的数据块大小读取文件的数据并自动生成sql插入数据到mysql。(每次从文件中按照chunk_size设定的数据块行数每次读取chunk_size条数据构成一个data_fram<类似于一个虚拟表>)# 3.1.统计本案例累计操作的数据块包含的行数insert_row_count = 0 #用于累计统计每次读取的数据块包含的数据行数# read_csv()当指定 chunksize 参数时,函数会返回一个 迭代器 (iterator),而不是一次性加载整个文件 #每次迭代时,会读取最多5000行数据到一个 DataFrame 中reader = pd.read_csv(csv_file, chunksize=chunk_size) #3.2.读取文件并获取迭代器对象reader # read_csv()是 pandas 库中的 read_csv 函数,用于读取CSV文件# 3.3.遍历迭代器中的每个元素(从迭代器中获取每个dataFrame)#  DataFrame,包含指定大小的数据块(类似于虚拟表)(本案例是包含csv文件3行数据的虚拟机)for data_frame in  reader:# 3.4.将迭代出的数据转化为sql并交给mysql去执行(追加方式插入数据,不插入data_frame的index)#'append' 表示追加数据到现有表中,   index=False:不将 DataFrame 的索引作为数据列插入到数据库中# (如果index的值是true则会给表中的index列自动插入数据(欧聪0开始),如果没有此列会报错<而且每次插入都是从0开始,相当于给每次插入的数据行一个编号>)data_frame.to_sql(name=table_name, con=engine, if_exists='append', index=False) #index的值为false则不会给index列插入数据(有index列时只会给此列插入null值)# 3.5.  将虚拟表data_frame中的数据条数累加到insert_row_count变量中insert_row_count += len(data_frame)  # len(chunk) 是内置函数,用于获取chunk对象的长度print(f"已导入 {insert_row_count}/{total_rows} 行")print(f"成功导入 {insert_row_count} 行数据到 {table_name} 表中")# 使用示例
csv_to_mysql_chunked(csv_file='C:\\ProgramData\\MySQL\\MySQL Server 9.4\\Uploads\\books.csv',   #   C:\ProgramData\MySQL\MySQL Server 9.4\Uploads\books.csvhost='localhost',user='root',password='root',database='bookstore',table_name='books',chunk_size=5000
)

http://www.dtcms.com/a/418478.html

相关文章:

  • 【第十五周】机器学习的学习笔记11
  • 一款强大的开源 MQTT 消息服务器:EMQX
  • 如何 网站优化公司做网站百度可以搜到吗
  • 门户网站 管理系统网站关键词怎么填写
  • lucene 8.7.0 版本中的倒排索引、数字、DocValues三种类型的查询性能对比
  • 关于npm和pnpm
  • Django 中的元类(Metaclass)应用及生产场景示例
  • 以涡度通量塔的高频观测数据为例,基于MATLAB开展;生态碳汇涡度相关监测与通量数据分析实践技术应用
  • 慈溪网站建设哪家好襄阳蒂凯网络网站建设小程序
  • 做网站保存什么格式最好建设银行企业网上银行网站打不开
  • 数据仓库和商务智能考试考点及关系梳理
  • 灵犀互娱笔试
  • 【多线程】什么是原子操作(Atomic Operation)?
  • Visual Studio Code 的 AI 插件汇总
  • Java学习笔记六(集合)
  • 简易分析慢 SQL 的流程和方法
  • Docker 中删除镜像与容器的完整指南
  • 通州手机网站建设北京网站设计实力乐云践新
  • 高速PCB板DDR5数据信号的长STUB要背钻吗?
  • FPGA强化-简易频率计
  • VBScript自动化打印:智能过滤Word文档
  • 解码数据结构内核链表
  • 郑州设计网站公司东莞建设银行电话号码
  • 个人网站的建设目标绥德网站建设
  • Elasticsearch面试精讲 Day 23:安全认证与权限控制
  • 学习嵌入式的第四十三天——ARM——I2C
  • 玳瑁的嵌入式日记---0928(ARM--UART)
  • CentOS 8 部署 Zabbix 7.0 LTS 完整流程(PostgreSQL)及不同系统agent安装
  • 网站开发环境设计怎么在百度做网站推广
  • Langchain+Neo4j+Agent 的结合案例-电商销售