0Pricing
Learn AI with Python · 课时

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 column

if_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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Python 的 sqlite3 模块操作 SQLite
  2. Pandas 与 SQL 集成
  3. 存储和查询机器学习结果
  4. 向量数据库简介
← 返回 Learn AI with Python