Python小技巧——将CSV文件导入到MySQL数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Python小技巧——将CSV文件导入到MySQL数据库

接上篇,本期,我们就使用python中的mysql-connector-python库将CSV文件导入到mysql中,我们使用的文件是前面通过爬虫获得的一个关于各行业龙头公司的csv文件,详见上市公司财务报表数据汇总

下面,我用pandas加mysql-connector-python库将上述CSV文件添加到mysql中。具体代码为:


import pandas as pdimport mysql.connector
# 读取CSV文件csv_file = '各行业的龙头公司.csv'df = pd.read_csv(csv_file,encoding='gbk')
# 连接到MySQL数据库cnx = mysql.connector.connect(user='root', password='root',                              host='localhost', database='dragoncompany')cursor = cnx.cursor()
# 创建表(如果不存在)table_name ="Season_finance"create_table_query = f"""CREATE TABLE IF NOT EXISTS {table_name}(                        `股票代码`VARCHAR(20),                        `股票简称`VARCHAR(20),                        `交易市场`VARCHAR(20),                        `每股收益(元)`FLOAT,                         `营业总收入(元)`FLOAT,                        `净利润(元)`FLOAT,                        `资产收益率`FLOAT,                        `营收同比增长`FLOAT,                        `净利润同比增长`FLOAT,                        `每股净资产(元)`FLOAT,                        `每股经营现金流(元)`FLOAT,                        `销售毛利率`FLOAT,                        `营收季度环比增长率`FLOAT,                        `净利润季度环比增长率`FLOAT,                        `所处行业`VARCHAR(20),                        `报表季度`VARCHAR(20))"""cursor.execute(create_table_query)
# 将数据插入到表中for index,row in df.iterrows():    insert_query = f"INSERT INTO {table_name} (`股票代码`,`股票简称`,`交易市场`,`每股收益(元)`,`营业总收入(元)`,`净利润(元)`,`资产收益率`,`营收同比增长`,`净利润同比增长`,`每股净资产(元)`,`每股经营现金流(元)`,`销售毛利率`,`营收季度环比增长率`,`净利润季度环比增长率`,`所处行业`,`报表季度`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"    cursor.execute(insert_query, tuple(row))
# 提交更改并关闭连接cnx.commit()cursor.close()cnx.close()

执行一下,用select在mysql中看看。

63cf4a7d31f237f345b61410d7a17316.png

已经写入,可能不太友好,我们用workbench看看,

78561d3aa9915c74bfb1bb083c25d91d.jpg


搞定了,里面有一些需要注意的坑,跟大家说一下:

Q1:运行中报错:

ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(20),

                       `股票简称`VARCHAR(20),

' at line 2


e70e8802529225f4d4c6bd1ddc4c256e.png

这个主要是符号问题导致的,字符串的符号不是“”、‘’,而是`。在键盘中是这个键

b9709a70c67a24e0a64f2ae209888bdf.jpg

Q2:运行中报错:

ProgrammingError: Not all parameters were used in the SQL statement


具体位置在:


c3e5dd2b93d7d2d124ed8021299126c4.png


这个错误源于在python3中连接数据库时,没有正确使用MySQL的占位符,虽然前面我们定义了每个列的数据类型,比如VARCHAR(20)、FLOAT等,但在具体执行过程中,无论是数字(包括整数和浮点数)、字符串、日期时间或者其他任意类型,都应该使用%s占位符。

因此,把上面的%f改成%s就解决这个问题了。



好了,本期代码完美解决了将CSV文件导入到MySQL数据库中,其中还是有一些需要注意的环节,大家试试吧?

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
20天前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课18 通过pg_bulkload适配pfs实现批量导入提速
本文介绍了如何修改 `pg_bulkload` 工具以适配 PolarDB 的 PFS(Polar File System),从而加速批量导入数据。实验环境依赖于 Docker 容器中的 loop 设备模拟共享存储。通过对 `writer_direct.c` 文件的修改,替换了一些标准文件操作接口为 PFS 对应接口,实现了对 PolarDB 15 版本的支持。测试结果显示,使用 `pg_bulkload` 导入 1000 万条数据的速度是 COPY 命令的三倍多。此外,文章还提供了详细的步骤和代码示例,帮助读者理解和实践这一过程。
36 0
|
22天前
|
SQL 关系型数据库 MySQL
Python中使用MySQL模糊查询的方法
本文介绍了两种使用Python进行MySQL模糊查询的方法:一是使用`pymysql`库,二是使用`mysql-connector-python`库。通过这两种方法,可以连接MySQL数据库并执行模糊查询。具体步骤包括安装库、配置数据库连接参数、编写SQL查询语句以及处理查询结果。文中详细展示了代码示例,并提供了注意事项,如替换数据库连接信息、正确使用通配符和关闭数据库连接等。确保在实际应用中注意SQL注入风险,使用参数化查询以保障安全性。
|
3月前
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
165 8
|
3月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
3月前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
454 15
|
3月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
5月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
104 1
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1月前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
172 42
|
2天前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。