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
。请注意,委托的功能可能有更多关于其功能的特定说明,此处未列出。
参数: | sql: 要执行的SQL查询或表名。 con: 或DBAPI2连接(回退模式) 使用 则仅支持sqlite3。 index_col:字符串或字符串列表,可选,默认值: 要设置为索引的列(MultiIndex)。 coerce_float: 尝试将非字符串,非数字对象(如 这对SQL结果集很有用。 params: 要传递给执行方法的参数列表。用于传递参数的语法取决于数据库驱动程序。 检查数据库驱动程序文档, 了解PEP 249的paramstyle中描述的五种语法样式中的哪一种。 例如,对于 parse_dates: 要解析为日期的列名的列表。 的字典,其中格式字符串是在解析的情况下的 或是在解析整数时间戳的情况下(d,S,NS,MS,我们)之一。 dict of ,其中arg dict对应于关键字参数,特别适用于没有本机Datetime支持的数据库, 例如SQLite, columns: 从SQL表中选择的列名列表(仅在读取表时使用)。 chunksize: 如果指定,则返回一个迭代器,其中 |
返回: |
|
例如,
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)