使用Python Pandas读取CSV并保存至MySQL数据库

Alice
Alice
发布时间:2026-10-12| 2人浏览过
原创

本文详细介绍如何利用Python的Pandas库读取本地CSV文件,处理日期格式,并通过两种方法将数据保存至MySQL数据库。文章对比了直接使用MySQLdb库与使用SQLAlchemy结合to_sql方法的优劣,重点讲解了日期格式转换及字段类型匹配问题,帮助开发者高效完成数据入库操作。

数据读取与预处理

在将数据存入数据库之前,首先需要利用 pandas 库读取本地的 .csv 文件。读取后,通常需要检查并处理数据的类型,特别是日期字段。例如,可以通过 pd.to_datetime() 将特定列转换为日期时间类型,并使用 data.dtypes 查看各列的数据类型,确保数据格式符合预期。

data=pd.read_csv('G:\data_operation\python_book\chapter5\\sales.csv')
data.iloc[:,1]=pd.to_datetime(data.iloc[:,1])

方法一:利用MySQLdb库封装类保存

第一种方法是使用 MySQLdb 库手动封装一个数据库操作类。该类负责建立连接、创建表以及插入数据。虽然这种方法灵活,但处理大量数据时耗时较长。

1. 建立连接与创建表

在初始化类时,需要指定数据库的用户名、主机、密码和数据库名。创建表时,需动态生成SQL语句,确保字段类型(如 varchar(20))与数据长度匹配。

class Jess_mysql():
 """
 设置mysql类,实现创建数据框,表,及添加数据
 """
 def __init__(self):
  self.mysql=MySQLdb.connect(user=mysql_name,host=mysql_host,password=mysql_password,database=mysql_database)
  self.conn=self.mysql.cursor()
 def create_table(self,table_names,col_names):
  """
  创建表
  :param table_names: 表名
  :param col_names: 列名,列表格式
  :return:
  """
  tables=' varchar(20),'.join(['%s'] *len(col_names))
  sql_yuju='create table if not exists `{t}` ({v} varchar(20))'.format(t=table_names,v=tables)#字段需要标注格式
  ss=sql_yuju %(tuple(col_names))
  print(ss)
  self.conn.execute(ss)
  self.mysql.commit()

2. 插入数据

在插入数据时,同样需要动态构建 INSERT 语句。注意处理列名和数据值的拼接,确保SQL语法正确。

def add_data(self,table_name,col_names,col_data):
  """
  :param table_name: 表名
  :param col_names: 列名,字段名
  :param col_data: 字段值
  :return:
  """
  colname=','.join(['%s']*len(col_names))
  data=','.join(['%s']*len(col_data))
  sql_yuju='INSERT INTO `{t}` ({name}) VALUES ({data});'.format(t=table_name,name=colname,data=data)
  ss=sql_yuju%(*col_names,*col_data)
  #print(ss)
  self.conn.execute(ss)
  self.mysql.commit()

方法二:利用SQLAlchemy与to_sql保存

第二种方法是使用 SQLAlchemy 创建数据库引擎,并结合 pandas 的 to_sql 方法保存数据。这种方法代码更简洁,且性能通常优于手动封装类。

1. 创建数据库引擎

使用 sqlalchemy.create_engine() 建立与MySQL的连接。连接字符串格式为 mysql+mysqldb://user:password@host:port/database。

import sqlalchemy
#engine=sqlalchemy.create_engine('mysql + mysqldb://root:123456@118.24.26.227:3306/python_yuny')
engine=sqlalchemy.create_engine('mysql+mysqldb://{user}:{password}@{host}:3306/{database}'.format
        (user=mysql_name,password=mysql_password,host=mysql_host,database=mysql_database))

2. 保存数据至MySQL

利用 pd.io.sql.to_sql() 将DataFrame直接写入数据库。可以指定表名、连接引擎、是否包含索引以及当表已存在时的处理策略(如 'append')。

pd.io.sql.to_sql(frame=data,name='yunying',con=engine,index=False,if_exists='append')

日期格式处理与注意事项

在保存数据时,日期格式的处理至关重要。如果MySQL字段设置为 varchar(20),而原始日期格式不匹配,可能导致数据写入不全。解决方法是使用 pandas.to_datetime() 设置 format 参数,确保格式与原始字符一致。例如,使用 datetime 库将日期转换为 '%Y%m%d' 格式,即可顺利写入 varchar(20) 字段。

x=data.shape[0]
for i in range(x):
 col_data=list(df.iloc[i,:])
 col_data[1]=datetime.date.strftime(col_data[1],'%Y%d%m')

读取MySQL数据

保存完成后,可以使用 pd.read_sql() 从MySQL读取数据。默认情况下,读取时不设置索引列,但可以自行指定索引列名。

df=pd.read_sql('select * from %s'%table_name,con=engine,index_col=None)

以上就是使用Python的Pandas库读取CSV文件并保存至MySQL数据库的详细内容,更多关于Python数据处理和数据库操作的技术资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。