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

【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&#xff08;第5版&#xff09; 练习 17.2 练习 17.2 定义一个tuple&#xff0c;保存一个string、一个vector和一个pair<string, int>。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**********************…...

外观检测设备真的能提高生产效率吗?

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

ant design pro 中用户的表单如何控制多个角色

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

Prometheus监控系统

目录 1.Prometheus概述 1.1 TSDB时序数据库 1.2 Prometheus 的特点 1.3 Prometheus 的生态组件 1.4 Prometheus 的工作模式&#xff1a; 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模型

本文主要内容&#xff1a; 介绍lane模型 一、 lane模型 lane模型就是react优先级的机制&#xff0c;可以用来 可以表示优先级的不同可能同时存在几个同优先级的更新&#xff0c;所以还得能表示批的概念方便进行优先级相关计算 1、表示优先级不同 lane模型使用31位的二进制…...

邦德咖啡线下门店盛大开业,引领国产健康咖啡新风尚

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

Elasticsearch + Search UI 构建一个文件搜索引擎

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

机械学习—零基础学习日志(如何理解概率论2)

全概率公式与贝叶斯公式 上面所提到的公式&#xff0c;可以使用上一篇文章的基本公式推导。 使用到了概率的基本运算公式。 完整的公式展示&#xff1a; 习题练习&#xff1a; 剩余的练习&#xff1a; 第二题解析&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 注意&…...

鸿蒙关于手机全局本地文件读取,写入

一.背景 需求是需要操作用户手机中的文件&#xff0c;不是应用沙箱 二.解决方案 这里要注意的一点拿到fsOpen.path的路径再去进行open文件&#xff0c;因为这里还不知道本地文件路径在哪里&#xff0c;需要选择一下路径再拿到路径去请求 1.这里就是进行两个fs.open&#xf…...

嵌入式企业面试真题

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

开源一款H5自适应留言表白墙php源码下载

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

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...