pandas.read_sql#

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None, dtype_backend=_NoDefault.no_default, dtype=None)[源代码]#

将 SQL 查询或数据库表读取到 DataFrame。

此函数是 read_sql_tableread_sql_query``(为了向后兼容)的便捷包装器。它将根据提供的输入委托给特定函数。SQL 查询将路由到 ``read_sql_query,而数据库表名将路由到 read_sql_table。请注意,委托的函数可能在其功能上具有比此处列出的更具体的说明。

Parameters:
sqlstr 或 SQLAlchemy Selectable (select 或 text object)

要执行的 SQL 查询或表名。

conADBC Connection, SQLAlchemy connectable, str, 或 sqlite3 connection

ADBC 在可能的情况下提供具有本机类型支持的高性能 I/O。使用 SQLAlchemy 可以使用该库支持的任何数据库。如果为 DBAPI2 对象,则仅支持 sqlite3。用户负责 ADBC 连接和 SQLAlchemy connectable 的引擎处理和连接关闭;str 连接会自动关闭。请参阅 here

index_colstr 或 str 列表,可选,默认:None

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

coerce_floatbool, default True

尝试将非字符串、非数字对象(如 decimal.Decimal)的值转换为浮点数,这对于 SQL 结果集非常有用。

params列表、元组或字典,可选,默认:None

要传递给 execute 方法的参数列表。用于传递参数的语法取决于数据库驱动程序。检查您的数据库驱动程序文档,了解 PEP 249 的 paramstyle 描述的五种语法样式中哪一种受支持。例如,对于 psycopg2,使用 %(name)s,因此使用 params={‘name’ : ‘value’}。

parse_dates列表或字典,默认:None
  • 要解析为日期的列名的列表。

  • 字典,格式为 {column_name: format string},其中 format string 在解析字符串时间时与 strftime 兼容,或者在解析整数时间戳时为 (D, s, ns, ms, us) 之一。

  • 字典,格式为 {column_name: arg dict},其中 arg dict 对应于 pandas.to_datetime() 的关键字参数。当使用不原生支持 Datetime 的数据库(如 SQLite)时尤其有用。

columnslist,默认:None

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

chunksizeint,默认 None

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

dtype_backend{‘numpy_nullable’, ‘pyarrow’}, 默认 ‘numpy_nullable’

应用于结果 DataFrame 的后端数据类型(仍处于实验阶段)。行为如下:

  • "numpy_nullable":返回支持可空 dtype 的 DataFrame (默认)。

  • "pyarrow":返回 pyarrow 支持的可空 ArrowDtype DataFrame。

在 2.0 版本加入.

dtype类型名称或列字典

数据的类型或列的类型。例如,np.float64 或 {‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’}。如果传递了表而不是查询,则忽略该参数。

在 2.0.0 版本加入.

Returns:
DataFrame 或 Iterator[DataFrame]

参见

read_sql_table

将 SQL 数据库表读入 DataFrame。

read_sql_query

将 SQL 查询读入 DataFrame。

Examples

通过 SQL 查询或 SQL 表名从 SQL 读取数据。在使用 SQLite 数据库时,仅接受 SQL 查询,仅提供 SQL 表名将导致错误。

>>> from sqlite3 import connect
>>> conn = connect(':memory:')
>>> df = pd.DataFrame(data=[[0, '10/11/12'], [1, '12/11/10']],
...                   columns=['int_column', 'date_column'])
>>> df.to_sql(name='test_data', con=conn)
2
>>> pd.read_sql('SELECT int_column, date_column FROM test_data', conn)
   int_column date_column
0           0    10/11/12
1           1    12/11/10
>>> pd.read_sql('test_data', 'postgres:///db_name')  

通过 parse_dates 参数应用日期解析到列。 parse_dates 参数将 pd.to_datetime 应用于提供的列。通过字典格式指定将 pd.to_datetime 应用于某列的自定义参数值:

>>> pd.read_sql('SELECT int_column, date_column FROM test_data',
...             conn,
...             parse_dates={"date_column": {"format": "%d/%m/%y"}})
   int_column date_column
0           0  2012-11-10
1           1  2010-11-12

在 2.2.0 版本加入: Pandas 现在支持通过 ADBC 驱动程序读取

>>> from adbc_driver_postgresql import dbapi  
>>> with dbapi.connect('postgres:///db_name') as conn:  
...     pd.read_sql('SELECT int_column FROM test_data', conn)
   int_column
0           0
1           1