Python Pandas read_sql函数详解与参数传递实战

山间有风
山间有风
发布时间:2026-10-14| 2人浏览过
原创

本文详细介绍Pandas中read_sql函数的用法,涵盖将SQL查询或数据库表读取为DataFrame的基本操作。重点解析params参数的两种传递方式:列表与字典,并结合SQLAlchemy连接PostgreSQL数据库,通过具体代码示例展示如何安全高效地传递查询参数,避免SQL注入风险。

Pandas read_sql函数概述

Pandas是建立在NumPy基础之上的数据分析工具,旨在简化数据处理任务。它集成了大量标准数据模型和库,提供了处理大规模数据集所需的高效工具。Pandas提供了众多便捷的函数和方法,帮助用户快速处理数据。随着使用深入,用户会意识到Pandas是构建强大且高效Python数据分析环境的关键组件。本文将重点介绍Pandas中read_sql方法的具体应用。

函数参数详解


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

该函数的主要功能是将SQL查询语句或数据库表数据读取并转换为DataFrame对象。

read_sql是一个兼容后端的便捷封装函数,内部会根据输入类型自动委托给read_sql_table或read_sql_query。具体而言,SQL查询语句会被路由至read_sql_query处理,而数据库表名则会被路由至read_sql_table处理。需要注意的是,被委托的具体函数可能有更详细的功能说明,此处不再赘述。

核心参数说明

参数:       

sql:string或SQLAlchemy可选(选择或文本对象)

要执行的SQL查询或表名。

con:SQLAlchemy可连接(引擎/连接)或数据库字符串URI

或DBAPI2连接(回退模式)

使用SQLAlchemy可以使用该库支持的任何数据库。如果是DBAPI2对象,

则仅支持sqlite3。

index_col:字符串或字符串列表,可选,默认值:无

要设置为索引的列(MultiIndex)。

coerce_float:boolean,默认为True

尝试将非字符串,非数字对象(如decimal.Decimal)的值转换为浮点,

这对SQL结果集很有用。

params:list,tuple或dict,optional,default:None

要传递给执行方法的参数列表。用于传递参数的语法取决于数据库驱动程序。

检查数据库驱动程序文档,

了解PEP 249的paramstyle中描述的五种语法样式中的哪一种。

例如,对于psycopg2,使用%(name)s,所以使用params = {'name':'value'}

parse_dates:list或dict,默认值:None

要解析为日期的列名的列表。

的字典,其中格式字符串是在解析的情况下的strftime兼容的字符串倍,

或是在解析整数时间戳的情况下(d,S,NS,MS,我们)之一。{column_name: format string}

dict of ,其中arg dict对应于关键字参数,特别适用于没有本机Datetime支持的数据库,

例如SQLite。{column_name: arg dict}pandas.to_datetime()

columns:list,默认值:None

从SQL表中选择的列名列表(仅在读取表时使用)。

chunksize:int,默认无

如果指定,则返回一个迭代器,其中chunksize是要包含在每个块中的行数。

返回:

DataFrame(数据帧)

以下是具体的使用示例。

MySQL数据库连接示例


import MySQLdb
mysql_cn= MySQLdb.connect(host='myhost', 
                port=3306,user='myusername', passwd='mypassword', 
                db='information_schema')
df_mysql = pd.read_sql('select * from VIEWS;', con=mysql_cn)    
print 'loaded dataframe from MySQL. records:', len(df_mysql)
mysql_cn.close()

内容扩展:

许多用户关心如何在Pandas的SQL查询中传递参数。

特别是在使用SQLAlchemy引擎连接PostgreSQL数据库时,常见的做法如下:

PostgreSQL参数传递:列表方式


df = psql.read_sql(('select "Timestamp","Value" from "MyTable" '
                     'where "Timestamp" BETWEEN %s AND %s'),
                   db,params=[datetime(2014,6,24,16,0),datetime(2014,6,24,17,0)],
                   index_col=['Timestamp'])

根据Pandas官方文档,params参数支持以字典形式传递,但实际使用中常遇到兼容性问题,尝试以下写法:

PostgreSQL参数传递:字典方式


df = psql.read_sql(('select "Timestamp","Value" from "MyTable" '
                     'where "Timestamp" BETWEEN :dstart AND :dfinish'),
                   db,params={"dstart":datetime(2014,6,24,16,0),"dfinish":datetime(2014,6,24,17,0)},
                   index_col=['Timestamp'])

至此,关于Python Pandas中read_sql函数的实例用法介绍完毕。如需了解更多相关Python Pandas及read_sql函数的详细知识,建议查阅本站历史文章或继续浏览后续相关内容。感谢大家的支持!

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

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 算法库。