Python的Pandas库中,pandas.read_sql函数是一个非常有用的工具,可以从SQL数据库直接读取数据并将其转换为DataFrame对象。这个函数非常灵活,可以处理来自不同数据库系统的查询结果,如MySQL、PostgreSQL、SQLite、Oracle等。本文主要介绍一下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_table和 read_sql_query(为了向后兼容)。它将根据提供的输入委托给特定的功能。SQL查询将被路由到read_sql_query,而数据库表名将被路由到read_sql_table。请注意,委托的功能可能有更多关于其功能的特定说明,此处未列出。

参数:       

sqlstrSQLAlchemy可选(选择或文本对象)

要执行的SQL查询或表名。

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

或DBAPI2连接(回退模式)

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

则仅支持sqlite3。

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

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

coerce_floatboolean,默认为True

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

这对SQL结果集很有用。

paramslisttupledict,可选的,默认:None

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

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

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

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

parse_dateslistdict,默认值:None

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

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

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

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

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

columnslist,默认值:None

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

chunksizeint,默认None

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

返回:

DataFrame

例如,

1)使用MySQLdb

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()

2)使用sqlalchemy

import pandas as pd
from sqlalchemy import create_engine

# 创建SQLite数据库连接
sqlite_engine = create_engine('sqlite:///your_database.db')

# 创建MySQL数据库连接,替换username、password、host、database
mysql_engine = create_engine('mysql+pymysql://username:password@host/database')

# SQL 查询
query = "SELECT * FROM your_table"

# 使用 read_sql 读取SQLite数据库数据
sqlite_df = pd.read_sql(query, sqlite_engine)
print("Data from SQLite:")
print(sqlite_df)

# 使用 read_sql 读取MySQL数据库数据
mysql_df = pd.read_sql(query, mysql_engine)
print("\nData from MySQL:")
print(mysql_df)

# 参数化查询
params = {'id': 10}
param_query = "SELECT * FROM your_table WHERE id = :id"
param_df = pd.read_sql(param_query, mysql_engine, params=params)
print("\nParameterized query result:")
print(param_df)

# 使用 chunksize 处理大数据集
print("\nProcessing large dataset in chunks:")
df_iter = pd.read_sql("SELECT * FROM your_table", mysql_engine, chunksize=100)
for df in df_iter:
    # 处理每个数据块
    print(df)

推荐文档

相关文档

大家感兴趣的内容

随机列表