我的编程空间,编程开发者的网络收藏夹
学习永远不晚

pandas中read_sql使用参数进行数据查询的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

pandas中read_sql使用参数进行数据查询的实现

pandas.read_sql 可以在数据库中执行指定的SQL语句查询或对指定的整张表进行查询,以DataFrame 的类型返回查询结果,这是在跟数据库进行交互操作时很重要的一步——既读取数据,还返回DataFrame方便处理。

要解决的问题: 编写过的SQL语句需要重复使用,这就涉及到参数,使用参数来替换条件,然后根据需要替换参数。

一、之前的处理方法

在没有使用参数之前,我一直使用的是正则法,也就是利用 re.sub 这个方法将需要的SQL内容替换掉,这样的好处就是可以替换任意内容,缺点就是必须每次使用的时候 import re.sub。

    from re import sub
    import sqlalchemy
    import pandas as pd
    # 创建数据库连接,这里使用的是pymysql
    engine = sqlalchemy.create_engine("mysql+pymysql://username:password@ip:port/store_name")
    sql = "select * from test where id = 'pid'"
    # 使用 sub 进行数据替换
    data = pd.read_sql(sub("pid", '1', sql), engine)

在这里使用的时候 pid 是为了统一处理才用的标识名,这样在以后不管什么时候都只需要对 pid 进行替换即可。

有一点需要注意的是 sub 替换后的传入是字符串,但是传入到 替换到SQL中是不会变的。比如

sql = "select * from test where id = pid" data =
pd.read_sql(sub("pid", '1', sql), engine) 

进行 sub("pid", '1',> sql) 操作后 SQL 变成了

sql select * from test where id = 1

如果 id 字段是 int 类型那就没问题,但是如果 id 字段是 char 或 varchar 等其他类型就会出现字段类型是字符串但给的是数字(mysql 很宽容,不一定会报错,但是从数据类型上来说肯定是错了)

二、使用 read_sql 中的 params 传入参数

1.文档说明

 pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)[source]

read_sql 方法中已经有了 params 这个参数,这个就是可以进行参数的传递,具体的描述如下

params : list, tuple or dict, optional, default: None
List of parameters to pass to execute method. The syntax used to pass parameters is database driver dependent. Check your database driver documentation for which of the five syntax styles, described in PEP 249’s paramstyle, is supported. Eg. for psycopg2, uses %(name)s so use params={‘name’ : ‘value’}

意思就是可以使用功能 list, tuple or dict 传递参数,但是如何怎么设置参数和传递参数需要依据使用的数据库引擎。PEP 249’s paramstyle 如下表

paramstyleMeaning
qmarkQuestion mark style, e.g. …WHERE name=?
numericNumeric, positional style, e.g. …WHERE name=:1
namedNamed style, e.g. …WHERE name=:name
formatANSI C printf format codes, e.g. …WHERE name=%s
pyformatPython extended format codes, e.g. …WHERE name=%(name)s

总结下就是在SQL语句中使用?, :1, :name, %s, %设置参数,然后在params 使用 list, tuple or dict 进行参数的传递

2.具体的使用

    from re import sub
    import sqlalchemy
    import pandas as pd
    # 创建数据库连接
    engine = sqlalchemy.create_engine("mysql+pymysql://username:password@ip:port/store_name")
    sql = "select * from test where id = %(pid)s"
    # 使用 params 进行参数传递
    data = pd.read_sql(sql, engine, params={'pid': '1'})

具体的参数就如上面代码所示,使用了 %(pid)s 设置参数,再用params={‘pid’: ‘1’}传递参数,在Stack Overflow上有个提问也是关于这个的,里面还有关于psycopg2 和SQLite 的参数传递。

三、总结对比

之前没有想过使用参数,是因为在SQL中我不仅要替换固定条件,而且有时候需要替换大段的SQL,所以使用 sub 会更灵活也更模糊(传入的是字符串,到了SQL里面数字还是字符串得再处理一遍),但是使用方法自带的参数传递可以很明确的传递正确的数据和数据类型,而且不觉得使用方法自带的参数传递很优雅?

四、字符串的格式化

对于参数的传递还有另外一种就是python中的字符串格式化,format函数可以实现不带参数、带索引参数、带关键字参数,python的字符串格式化可以参考python格式化输出
下面是format的使用示例

in : print("{one} are {two} {three}".format(one='you', two=1, three='pig'))
out: you are 1 pig

这里的1应该为a,但是为了演示传递整数参数

到此这篇关于pandas中read_sql使用参数进行数据查询的实现的文章就介绍到这了,更多相关pandas read_sql查询内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

pandas中read_sql使用参数进行数据查询的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Pandas数据查询的集中实现方法

本文主要介绍了Pandas数据查询的集中实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-27

Pandas数据查询的集中如何实现

今天小编给大家分享一下Pandas数据查询的集中如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Pandas查询数据的
2023-07-05

Go中怎么使用MongoDB进行数据查询

这篇文章主要讲解了“Go中怎么使用MongoDB进行数据查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go中怎么使用MongoDB进行数据查询”吧!首先,我们需要安装“mgo” Go-M
2023-07-05

怎么使用mysql进行数据查询

要使用MySQL进行数据查询,您需要按照以下步骤进行操作:连接到MySQL数据库。可以使用命令行或图形界面工具连接到MySQL数据库。命令行:在命令行中输入mysql -u 用户名 -p,然后输入密码连接到MySQL数据库。图形界面工具:
怎么使用mysql进行数据查询
2024-04-09

Python实践之使用Pandas进行数据分析

在数据分析领域,Python的Pandas库是一个非常强大的工具。这篇文章将为大家详细介绍如何使用Pandas进行数据分析,希望对大家有所帮助
2023-05-18

如何使用MySQL进行高效的数据查询?

如何使用MySQL进行高效的数据查询?MySQL是一种常用的关系型数据库管理系统,广泛应用于网站开发、数据分析等领域。在实际应用中,进行高效的数据查询对于提升系统性能和用户体验至关重要。本文将介绍如何使用MySQL进行高效的数据查询,并给出
2023-10-22

如何使用PHP进行数据库的分页查询?(PHP实现数据库分页查询的方法有哪些?)

摘要本文详细介绍了如何使用PHP进行数据库分页查询。提供了五种常用方法:LIMIT子句、OFFSET子句、rownum()函数、自连接和分页库。每种方法的语法、优点和缺点都进行了阐述,可帮助您根据特定需求选择合适的方法。分页查询可以优化大型数据集的性能并防止数据库过载。
如何使用PHP进行数据库的分页查询?(PHP实现数据库分页查询的方法有哪些?)
2024-04-02

在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询

在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一步,搭建这个小案例,引入spring和mybti
2023-05-31

怎么使用PHP查询数据库数值进行操作

这篇文章主要介绍“怎么使用PHP查询数据库数值进行操作”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用PHP查询数据库数值进行操作”文章能帮助大家解决问题。首先,我们需要连接到数据库。PHP提
2023-07-05

怎么在Python中使用Pandas进行数据清洗

怎么在Python中使用Pandas进行数据清洗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python的五大特点是什么python的五大特点:1.简单易学,
2023-06-14

怎么使用PHP进行数据查询和翻页

本文小编为大家详细介绍“怎么使用PHP进行数据查询和翻页”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用PHP进行数据查询和翻页”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 数据查询首先,我们需要获
2023-07-05

怎么使用ThinkPHP5进行数据库查询排序

这篇文章主要讲解了“怎么使用ThinkPHP5进行数据库查询排序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用ThinkPHP5进行数据库查询排序”吧!在进行数据库查询时,排序是一个
2023-07-05

如何使用SpringCache进行缓存数据库查询

这篇文章给大家分享的是有关如何使用SpringCache进行缓存数据库查询的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SpringCache进行缓存数据库查询1、在SpringBoot的启动类上添加注解@Ena
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录