【python基础】—利用pandas读取或写入mysql表数据
文章目录
- 一、read_sql()
- 二、to_sql()
- 三、连接数据库方式—MySQL
- 1、用sqlalchemy包构建数据库链接
- 2、用DBAPI构建数据库链接
- 四、容易遇到的问题
一、read_sql()
- 功能
将 SQL 查询/数据库表读入 DataFrame。
-
语法
-
- 读取数据库(通过SQL语句或表名)
pandas.read_sql(sql, con, index_col: ‘str | Sequence[str] | None’ = None, coerce_float: ‘bool’ = True, params=None, parse_dates=None, columns=None, chunksize: ‘int | None’ = None) -> ‘DataFrame | Iterator[DataFrame]’
-
- 读取自定义数据(通过SQL语句)
pandas.read_sql_query(sql, con, index_col=None, coerce_float: ‘bool’ = True, params=None, parse_dates=None, chunksize: ‘int | None’ = None, dtype: ‘DtypeArg | None’ = None) -> ‘DataFrame | Iterator[DataFrame]’
-
- 读取整张表于DataFrame格式(通过表名)
pandas.read_sql_table(table_name: ‘str’, con, schema: ‘str | None’ = None, index_col: ‘str | Sequence[str] | None’ = None, coerce_float: ‘bool’ = True, parse_dates=None, columns=None, chunksize: ‘int | None’ = None) -> ‘DataFrame | Iterator[DataFrame]’
read_sql是综合了read_sql_table和read_sql_query的,所以一般用read_sql就好了。
- 基本参数
名称 | 说明 |
---|---|
sql | 要执行的数据库或SQL命令字符串。 |
con | 连接sql数据库的engine,一般可以用SQLalchemy或者pymysql之类的包建立。 |
index_col | 选择某1列或几列作为index(或MultiIndex),字符串或字符串列表。 |
coerce_float | 布尔值,将数字形式的字符串直接以float型读入,默认为True。 |
params | 执行查询时传递的参数。 |
parse_dates | 将某一列日期型字符串转换为datetime型数据,与pd.to_datetime函数功能类似。可以直接提供需要转换的列名以默认的日期形式转换,也可以用字典的格式提供列名和转换的日期格式:比如{column_name: format string}(format string:“%Y:%m:%H:%M:%S”)。 |
columns | 要选取的列。一般没啥用,因为在sql命令里面一般就指定要选择的列了。 |
chunksize | 如果提供了一个整数值,那么就会返回一个generator,每次输出的行数就是提供的值的大小。 |
二、to_sql()
- 功能
将DataFrame写入SQL数据库表。
- 语法
to_sql(name: ‘str’, con, schema=None, if_exists: ‘str’ = ‘fail’, index: ‘bool_t’ = True, index_label=None, chunksize=None, dtype: ‘DtypeArg | None’ = None, method=None) -> ‘int | None’ method of pandas.core.frame.DataFrame instance
- 基本参数
名称 | 说明 |
---|---|
name | 数据库对应的表名 |
con | 与数据库链接的方式,推荐使用sqlalchemy的engine类型 |
schema | 相应数据库的引擎,不设置则使用数据库的默认引擎,如mysql中的innodb引擎 |
if_exists | 可选参数,字符串,默认是"fail"。当数据库中已经存在数据表时,对数据表的操作,有replace替换,即删除原来的表,重新创建一个新表;append追加,fail则当表存在时提示ValueError。 |
index | 可选参数,bool类型,默认是True。是否将DataFrame的索引写入数据库表中。 |
index_label | 可选参数,字符串类型,当上一个参数index为True时,设置写入数据表时index的列名称。 |
chunksize | 可选参数,int类型,默认是None。一次写入数据时的数据行数量,设置整数,如20000,当数据量很大时,需要设置,否则会链接超时写入失败。 |
dtype | 可选参数,字典类型,默认是None。将列名映射到SQL类型。 |
三、连接数据库方式—MySQL
1、用sqlalchemy包构建数据库链接
通过 sqlalchemy 的 create_engine 创建:有两种方式,基本格式一致,区别只是在于使用 mysqldb,还是使用 pymysql,推荐使用pymysql。
pymysql使用方式
import pandas as pd
from sqlalchemy import create_engine# 建立数据库连接
# "mysql+pymysql://{用户名}:{密码}@{域名}:{端口号}/{数据库名}"
engine = create_engine("mysql+pymysql://root:123456@localhost:3306/data")
mysqldb使用方式
mysqldb 是 python2 的 mysql 连接库,在 python3 时,已经废除 mysqldb,改为pymysql。在 sqlachemy 必须使用 mysqldb 驱动时,需要先导入pymysql ,然后执行 “pymysql.install_as_MySQLdb()” 才能使用。
import pandas as pd
import pymysql
from sqlalchemy import create_engine
pymysql.install_as_MySQLdb()
engine = create_engine("mysql+pymysql://root:123456@localhost:3306/data")
封装数据库信息,格式化传入:
db_info = {'user':'root','password':'123456','host':'localhost','database':'data','port':3306
}
engine = create_engine('mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info)
示例1: 将 MySQL数据库表读入 DataFrame 。
# 定义SQL查询
sql_query = 'select * from sc'# 执行查询操作:把sql查询结果读取为dataframe
df = pd.read_sql(sql_query,engine)
示例2: 将 DataFrame 中的数据写入 MySQL 数据库表。
# 执行写入操作:将dataframe写入sql数据表
df.to_sql(name='',con=engine,if_exists='replace',index=False)
2、用DBAPI构建数据库链接
import pandas as pd
import pymysql# 建立数据库连接
conn = pymysql.connect(host='localhost', # 主机名(或IP地址)port=3306, # 端口号,默认为3306user='root', # 用户名password='123456', # 密码charset='utf8' # 设置字符编码
)
# 获取mysql服务信息(测试连接,会输出MySQL版本号)
print(conn.get_server_info())
示例1: 将 MySQL数据库表读入 DataFrame 。
# 选择数据库
conn.select_db("database")# 定义SQL查询
sql_query = 'select * from sc'# 执行查询操作:把sql查询结果读取为dataframe
df = pd.read_sql(sql_query,conn)
示例2: 将 DataFrame 中的数据写入 MySQL数据库表。
# 执行写入操作:将dataframe写入sql数据表
df.to_sql(name='',con=conn ,if_exists='replace',index=False)
会显示下面的报错情况:
TypeError: not all arguments converted during string formatting
pandas.errors.DatabaseError: Execution failed on sql ' SELECT name FROM sqlite_master WHERE type IN ('table', 'view') AND name=?; ': not all arguments converted during string formatting
原因: 引擎问题。在python3中,to_sql() 的con对象,是 sqlalchemy 的 engine 引擎。
解决方案: 使用to_sql()将dataframe写入sql数据表,要用sqlalchemy包构建数据库链接。参考文章:https://blog.csdn.net/xiaoyw71/article/details/131126161。
四、容易遇到的问题
问题一: python中sqlalchemy操作mysql密码包含@特殊字符。
import pandas as pd
from sqlalchemy import create_enginedb_info = {'user':'root','password':'123@456','host':'localhost','database':'data','port':3306
}
engine = create_engine('mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info)# 定义SQL查询
sql_query = 'select * from sc'# 执行SQL查询操作
df=pd.read_sql_query(sql_query ,engine)
报错:sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '2024jyz@172.30.21.57' ([Errno -2] Name or service not known)")
解决方案:
import pandas as pd
from sqlalchemy import create_engine
from urllib import parsedb_info = {'user':'root','password':parse.quote_plus('123@456'),'host':'localhost','database':'data','port':3306
}engine = create_engine('mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info)
参考文章:
https://blog.csdn.net/initiallht/article/details/120406317
https://blog.csdn.net/qq_41982570/article/details/127059642
参考文章:
https://blog.csdn.net/LeiLiFengX/article/details/109922043
https://www.cnblogs.com/think90/articles/11899070.html
相关文章:

【python基础】—利用pandas读取或写入mysql表数据
文章目录 一、read_sql()二、to_sql()三、连接数据库方式—MySQL1、用sqlalchemy包构建数据库链接2、用DBAPI构建数据库链接 四、容易遇到的问题 一、read_sql() 功能 将 SQL 查询/数据库表读入 DataFrame。 语法 读取数据库(通过SQL语句或表名) pand…...

C/C++信号量
文章目录 一、信号量介绍1.1 什么是信号量1.2 信号量的原子性1.3 信号量的使用 二、C语言使用2.1 函数接口2.2 信号量代码 三、C20使用3.1 函数接口 四、C11模拟信号量 一、信号量介绍 1.1 什么是信号量 信号量是一种特殊的变量,是操作系统层面的,可以…...

SSL Pining 问题解决方案
实战案例 为了能够更好的复现 SSL Pining 场景,我们对一个 App(https:app4.scrape.center)进行抓包,这个 App 包含了 SSL Pining 的相关设置,如果我们将手机的代理设置为抓包软件提供的代理服务,那么这个 …...

【Spring Boot】全局异常处理
目录 背景 前言 设计步骤 1.定义异常信息类: 2.自定义异常: 3.创建全局异常处理类 4.在控制器中抛出异常 5.输出 捕获 Valid 校验异常 背景 去面试的时候被问到SpringBoot项目中,如何处理全局异常的,也就是如何捕获全局异…...

安全基础学习-SM3加密算法
SM3是一种广泛使用在中国国家标准中的哈希算法,全称为“中国国家密码算法SM3”。它由中国国家密码管理局制定,主要用于数字签名和消息完整性验证。SM3算法与SHA-256在结构上类似,但其设计具有特定的改进以增强安全性。 SM3算法生成256位的哈希值,使用了32轮的迭代运算,并…...

MySQL中处理JSON数据:大数据分析的新方向
1. 简介 1.1. 概述 在MySQL中处理JSON数据的能力是在MySQL 5.7版本中引入的,并在后续的版本中不断得到增强。这使得MySQL能够直接操作和查询JSON格式的数据,极大地扩展了其处理复杂数据结构的能力。 1.2. 主要特点 灵活性与可扩展性 :JSON允许开发者存储不规则和嵌套的数…...

K8S 容器调度
在Kubernetes中,容器调度是一个自动化的过程,负责将容器(在Kubernetes中称为Pod)分配到集群中的合适节点上运行。这一过程由Kubernetes的调度器(kube-scheduler)控制,它通过一系列算法和策略来确…...

C++ //练习 17.2 定义一个tuple,保存一个string、一个vector<string>和一个pair<string, int>。
C Primer(第5版) 练习 17.2 练习 17.2 定义一个tuple,保存一个string、一个vector和一个pair<string, int>。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /**********************…...

外观检测设备真的能提高生产效率吗?
零部件外观检测设备是一种专业的设备,用于对各类零部件的外观进行检测和评估。现代制造业中扮演着重要的角色,能够有效提升产品质量,确保产品符合国家标准和客户需求。 首先,零部件外观检测设备具备高精度和高效率的特点。通过采用…...

ant design pro 中用户的表单如何控制多个角色
ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的 看上面的图片 当创建或编辑一个用户时,…...

Prometheus监控系统
目录 1.Prometheus概述 1.1 TSDB时序数据库 1.2 Prometheus 的特点 1.3 Prometheus 的生态组件 1.4 Prometheus 的工作模式: 1.5 Prometheus 的工作流程 1.6 Prometheus 的局限性 2.部署Prometheus 2.1 Prometheust Server 端安装和相关配置 2.2 部署 Expo…...

mq-fanout交换机
交换机 交换机是什么?步骤 交换机本身具备路由功能 消息先发到交换机,交换机在路由到队列,消费者监听队列拿到消息 广播模式是什么 是什么 例如:每个微服务创建队列,订单服务只启动1台,1个消费者,订单 怎么创建 创建一个队列 -交换机里type-选择模式(广播模式) 在交换…...

android13禁用打开wifi ap 热点
总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 这个文章介绍的是如何禁止用户打开wifi热点,禁止用户安装app后,打开wifi热点。 2.情况分析 android13 应用层打开wifi AP public void setWifiApEnabled(boolean isEn…...

前端宝典之六:React源码解析之lane模型
本文主要内容: 介绍lane模型 一、 lane模型 lane模型就是react优先级的机制,可以用来 可以表示优先级的不同可能同时存在几个同优先级的更新,所以还得能表示批的概念方便进行优先级相关计算 1、表示优先级不同 lane模型使用31位的二进制…...

邦德咖啡线下门店盛大开业,引领国产健康咖啡新风尚
近日,国内咖啡市场迎来了一股清新的绿色风潮,邦德咖啡线下门店正式拉开帷幕,以其独特的健康理念和创新的产品,誓要成为国产咖啡界的一股强劲力量。 邦德咖啡线下门店以阿卡迪亚绿色为品牌主色调,立志打造国产健康咖啡…...

Elasticsearch + Search UI 构建一个文件搜索引擎
目录 Elasticsearch使用优势App Search Search UI配置engine集中管理配置和提供实用工具函数配置和初始化一个基于Elasticsearch的搜索界面应用程序Search UI 基础用法 好书推荐 Elasticsearch 使用优势 使用ElasticSearch的主要好处在于其强大的全文搜索和实时分析能力。Elas…...

机械学习—零基础学习日志(如何理解概率论2)
全概率公式与贝叶斯公式 上面所提到的公式,可以使用上一篇文章的基本公式推导。 使用到了概率的基本运算公式。 完整的公式展示: 习题练习: 剩余的练习: 第二题解析: 第三题: 第四题: 注意&…...

鸿蒙关于手机全局本地文件读取,写入
一.背景 需求是需要操作用户手机中的文件,不是应用沙箱 二.解决方案 这里要注意的一点拿到fsOpen.path的路径再去进行open文件,因为这里还不知道本地文件路径在哪里,需要选择一下路径再拿到路径去请求 1.这里就是进行两个fs.open…...

嵌入式企业面试真题
1.C语言中指针数组和数组指针的区别是什么? 答:指针数组是指数组的元素都是指针类型的数组。数组指针是指一个指向数组的指针。指向的是数组第一个元素的地址,每次偏移一个数组的大小。 2.讲一下什么是结构体字节对齐? 答:结构体字节对齐是指当结构体中元素的物理内存大…...

开源一款H5自适应留言表白墙php源码下载
开源一款H5自适应留言表白墙php源码下载,优点就是安装简单,功能实用[滑稽][滑稽] 缺点就是UI简陋,功能稀少 第一张是首页,第二张是查看留言 第三张是留言列表(10秒自动刷新),第四张是表白墙界面...

jmeter引入jar包的三种方式
示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12&l…...

零基础学习Redis(5) -- redis单线程模型介绍
前面我们提到过,redis是单线程的,这期我们详细介绍一下redis的单线程模型 1. redis单线程模型 redis只使用一个线程处理所有的请求,并不是redis服务器进程内部只有一个线程,其实也存在多个线程,只不过多个线程是在处…...

Android Audio
audio概述: Android Audio知识梳理 看完这一篇就够了!-CSDN博客 Android audio篇章(1)------Audio架构_android audio(1)-CSDN博客 android audio google: 音频 | Android Open Source Project (google.cn) 音频…...

远程MySQL数据库:定义、优势及cPanel的数据库工具
在现代网站和应用程序开发中,数据库是必不可少的核心部分。通常情况下,数据库与网站托管在同一台服务器上,但为了提升性能和安全性,越来越多的用户选择使用远程MySQL数据库。那么,什么是远程MySQL数据库呢?…...

【docker】Dockerfile
Dockerfile是用于构建Docker镜像的文本文件,其中包含一组用于定义镜像构建过程的指令。下面是常见的Dockerfile指令及其解释: FROM:指定基础镜像,用于构建新镜像。COPY:将文件或目录从构建上下文复制到镜像中。ADD&am…...

Redis 的 List 结构非常适合用于实现消息队列php
1. Redis List 结构消息队列简介 Redis 的 List 结构非常适合用于实现消息队列。你可以通过 LPUSH 或 RPUSH 命令将消息推入队列,通过 BLPOP 或 BRPOP 命令从队列中弹出消息。BLPOP 和 BRPOP 命令支持阻塞操作,适合在消费者端等待消息的到来。 2. 实现…...

极速闪存启动:SD与SPI模式的智能初始化指南
最近很多客户朋友在询问我们 CS 创世 SD NAND 能不能使用 SPI 接口,两者使用起来有何区别,下面为大家详细解答。 SD MODE: CS 创世 SD NAND 支持 SD 模式和 SPI 模式,SD NAND 默认为 SD 模式,上电后,其初始化过程如下…...

利用多Lora节省大模型部署成本|得物技术
一、背景 近期,我们在大模型集群的部署过程中遇到了一些挑战。公司有多个业务场景,每个场景都基于自身的数据进行微调,训练出相应的大模型并上线。然而,这些场景的调用量并不高,同时大模型的部署成本较为昂贵…...

使用SSMS连接和查询 SQL Server 实例
简介 SQL Server Management Studio 是用于管理SQL Server基础架构的集成环境。Management Studio提供用于配置、监视和管理SQL Server实例的工具。 此外,它还提供了用于部署、监视和升级数据层组件(如应用程序使用的数据库和数据仓库)的工具以生成查询和脚本。 官方…...

HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(十五)
一、不支持for … in 规则:arkts-no-for-in 级别:错误 由于在ArkTS中,对象布局在编译时是确定的、并且不能在运行时被改变,所以不支持使用for … in迭代一个对象的属性。对于数组来说,可以使用常规的for循环。TypeScri…...