Pandas 与 SQL 集成
使用 pd.read_sql()、df.to_sql() 和 SQLAlchemy 引擎,直接将数据库结果查询到 DataFrames 中
Pandas 与 SQL 集成 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
Pandas 与 SQL 的结合
您不必在 SQL 和 pandas 之间二选一——它们可以协同工作。将数据库查询为 DataFrame,使用 pandas 进行转换,再将结果写回数据库。
连接两者的是 SQLAlchemy,以及 pandas 的 read_sql 和 to_sql 函数。
为什么使用 SQLAlchemy?
pandas 通过连接或 SQLAlchemy引擎与数据库通信。引擎对数据库类型进行了抽象,因此只需更改 URL,同一段代码就能用于 SQLite、PostgreSQL、MySQL 等数据库。
创建引擎
create_engine 接受一个连接 URL。URL 方案用于标识数据库驱动程序。
from sqlalchemy import create_engine
engine = create_engine("sqlite:///ml.db")
# Postgres: create_engine("postgresql://user:pass@host:5432/db")使用 pd.read_sql 读取表
pd.read_sql 会运行查询(或读取表),并返回一个 DataFrame。请传入 SQL 字符串和引擎。
import pandas as pd
df = pd.read_sql("SELECT * FROM experiments", engine)
print(df.head())使用筛选查询进行读取
让数据库完成筛选和聚合,然后将更小的结果交给 pandas。这样比加载全部数据高效得多。
df = pd.read_sql(
"SELECT name, accuracy FROM experiments WHERE accuracy > 0.85 ORDER BY accuracy DESC",
engine,
)
print(df)参数化查询
使用 params 参数安全地传入查询参数,而不要格式化字符串。
from sqlalchemy import text
df = pd.read_sql(
text("SELECT * FROM experiments WHERE name = :n"),
engine,
params={"n": "xgb"},
)使用 df.to_sql 写入 DataFrame
df.to_sql(table, engine) 会将 DataFrame 写入数据库表;如果需要,还会根据 DataFrame 的数据类型创建该表。
df.to_sql("results", engine, index=False)index 参数
默认情况下,to_sql 会将 DataFrame 的索引写入一列。通常您并不需要这样做——传入 index=False 即可跳过索引。
df.to_sql("results", engine, index=False) # no extra index columnif_exists 参数
if_exists 控制表已经存在时的行为:
"fail"——产生错误(默认行为)"replace"——删除并重新创建表"append"——向现有表添加行
df.to_sql("results", engine, if_exists="append", index=False)
# Use "replace" to overwrite, "fail" to be safe一次往返的工作流程
典型流程是:从 SQL 读取原始数据,在 pandas 中进行转换,再将清理后的结果写回新表。
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("sqlite:///ml.db")
raw = pd.read_sql("SELECT * FROM experiments", engine)
raw["accuracy_pct"] = (raw["accuracy"] * 100).round(1)
raw.to_sql("experiments_clean", engine, if_exists="replace", index=False)大型表的分块读取
对于无法全部装入内存的表,请向 read_sql 传入 chunksize,以批量迭代结果。
for chunk in pd.read_sql("SELECT * FROM big_table", engine, chunksize=10000):
process(chunk) # handle 10k rows at a time快速检查:追加行
您希望 to_sql 向现有表添加新行,而不删除该表。
回顾:pandas 和 SQL
现在您已经可以在 pandas 和数据库之间传输数据:
- 使用
create_engine(url)创建与具体数据库无关的连接 - 使用
pd.read_sql(query, engine)将查询结果加载到 DataFrame 中 - 使用
df.to_sql(table, engine, index=False, if_exists=...)将数据写回 - 使用参数化查询和
chunksize提高安全性并处理更大规模的数据
下一步:存储和查询机器学习实验结果。
常见问题解答
「Pandas 与 SQL 集成」课时是免费的吗?
是的 — 「Pandas 与 SQL 集成」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「Pandas 与 SQL 集成」这节课中我会学到什么?
使用 pd.read_sql()、df.to_sql() 和 SQLAlchemy 引擎,直接将数据库结果查询到 DataFrames 中 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Pandas 与 SQL 集成」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 Python 的 sqlite3 模块操作 SQLite
- Pandas 与 SQL 集成
- 存储和查询机器学习结果
- 向量数据库简介