pd.read_sql函数介绍 前言pd.read_sql 是 Pandas 库中一个非常强大且常用的函数。它的核心作用是将 SQL 查询的结果或者整张数据库表直接读取并转换为一个 Pandas DataFrame数据框。用法、核心参数和示例。核心前提你需要一个“连接” (Connection)pd.read_sql 本身不具备直接连接数据库的能力它需要你提供一个数据库连接对象。官方强烈推荐使用 SQLAlchemy 来创建连接支持 MySQL, PostgreSQL, SQLite, Oracle 等几乎所有主流数据库。基本语法与核心参数importpandasaspd dfpd.read_sql(sql,con,index_colNone,coerce_floatTrue,paramsNone,parse_datesNone,chunksizeNone)参数详解1.sql (必填): 可以是一段完整的 SQL 查询语句如 “SELECT * FROM users”也可以是数据库中的表名如 “users”。2.con (必填): 数据库连接对象。推荐传入 SQLAlchemy 的 engine。3.index_col: 字符串或列表。指定哪一列或哪几列作为 DataFrame 的索引Index。如果不指定Pandas 会自动生成 0, 1, 2… 的数字索引。4.params: 列表、元组或字典。用于向 SQL 语句中传递参数。强烈建议使用它来代替字符串拼接以防止 SQL 注入攻击5.parse_dates: 列表或字典。告诉 Pandas 把哪几列解析为时间/日期格式datetime。例如 parse_dates[‘create_time’]。6.chunksize: 整数。当你查询的数据量非常大比如几千万条内存装不下时使用。 指定后它不会一次性返回完整的 DataFrame而是返回一个迭代器每次产出指定行数的 DataFrame。代码示例示例 A最基础的查询importpandasaspdfromsqlalchemyimportcreate_engine# 1. 创建数据库连接引擎 (以 MySQL 为例)# 格式: 数据库类型驱动://用户名:密码主机IP:端口/数据库名enginecreate_engine(mysqlpymysql://root:123456localhost:3306/my_database)# 2. 编写 SQL 语句sql_querySELECT id, name, age, join_date FROM employees WHERE age 25# 3. 执行查询并转为 DataFrame# 同时把 join_date 列解析为时间格式把 id 列设为索引dfpd.read_sql(sql_query,conengine,index_colid,parse_dates[join_date])print(df.head())示例 B安全地传递参数 (防止 SQL 注入)不要用 fSELECT * FROM table WHERE name ‘{user_input}’ 这种写法# 使用 %s 作为占位符 (不同数据库驱动占位符可能不同如 sqlite 用 ?)sqlSELECT * FROM users WHERE department %s AND salary %s# 将参数通过 params 传入dfpd.read_sql(sql,conengine,params[Sales,50000])实战# 检查分区数据量是否正常defcheck_table_records(day,hour,table_name):enginecreate_engine(mysqlpymysql://root:123456localhost:3306/my_database)# 当前分区的数据量sqlfselect count(1) as cnt from{table_name}where day{day} and hour{hour}print(开始执行sqlsql)start_timedatetime.datetime.now()print(开始时间是,start_time)dfpd.read_sql(sql,conengine)end_timedatetime.datetime.now()print(结束时间是,end_time)elapsed_timeend_time-start_timeprint(代码执行耗时,elapsed_time.total_seconds(),秒)rows_numdf[cnt][0]print(f{table_name}表的 day{day} and hour{hour} 分区数据量{rows_num})