0Pricing
Learn AI with Python · 课时

使用 Python 的 sqlite3 模块操作 SQLite

创建数据库和表,执行 INSERT/SELECT/UPDATE,使用参数化查询并管理连接

使用 Python 的 sqlite3 模块操作 SQLite 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

为什么 AI 需要数据库?

数据量增长,或者项目的多个部分需要访问相同记录时,平面文件就不够用了。数据库可以提供快速查询、结构化模式和安全的并发访问。

SQLite 是一种无需设置的基于文件的数据库,通过 sqlite3 模块内置于 Python 中,非常适合 AI 实验和小型项目。

使用 sqlite3.connect 进行连接

sqlite3.connect 会打开(或创建)数据库文件,并返回一个连接。使用 :memory: 可以创建临时的内存数据库。

import sqlite3

conn = sqlite3.connect("ml.db")   # creates ml.db if missing
print(conn)

游标和 cursor.execute

您需要通过从连接中获取的游标来运行 SQL。cursor.execute(sql) 会向数据库发送一条语句。

import sqlite3

conn = sqlite3.connect("ml.db")
cur = conn.cursor()
cur.execute("SELECT sqlite_version()")
print(cur.fetchone())

CREATE TABLE IF NOT EXISTS

使用模式定义表。IF NOT EXISTS 可以安全地重复运行该语句——如果表已经存在,也不会产生错误。

cur.execute("""
CREATE TABLE IF NOT EXISTS experiments (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    accuracy REAL,
    created_at TEXT
)
""")

使用占位符执行 INSERT

绝不要使用字符串格式化来构建 SQL——这样会引入 SQL 注入风险,并且在遇到引号时出错。请使用 ? 占位符,并将值作为元组传入。

cur.execute(
    "INSERT INTO experiments (name, accuracy, created_at) VALUES (?, ?, ?)",
    ("baseline", 0.82, "2026-05-29"),
)

使用 executemany 插入多行

executemany 一次高效调用即可插入元组列表——比循环调用 execute 快得多。

rows = [
    ("rf", 0.88, "2026-05-29"),
    ("xgb", 0.91, "2026-05-29"),
]
cur.executemany(
    "INSERT INTO experiments (name, accuracy, created_at) VALUES (?, ?, ?)",
    rows,
)

conn.commit() 保存更改

写入操作发生在事务中,只有调用 conn.commit() 后才会持久化。忘记这一步是初学者最常见的错误——关闭连接后,您的数据会悄无声息地消失。

conn.commit()   # persist all pending INSERT/UPDATE/DELETE

使用 fetchall 和 fetchone 查询

执行 SELECT 后,可以获取结果:

  • fetchone()——下一行单独的记录
  • fetchall()——将剩余所有记录作为元组列表返回
  • 对于大型结果集,直接迭代游标
cur.execute("SELECT name, accuracy FROM experiments")
for row in cur.fetchall():
    print(row)   # ("baseline", 0.82) ...

筛选和排序

SQL 会完成繁重的工作:使用 WHERE 筛选,使用 ORDER BY 排序,使用 LIMIT 限制数量。查询值也应使用占位符。

cur.execute(
    "SELECT name, accuracy FROM experiments WHERE accuracy > ? ORDER BY accuracy DESC LIMIT 3",
    (0.85,),
)
print(cur.fetchall())

用于按名称访问的行工厂

默认情况下,行是元组。设置 conn.row_factory = sqlite3.Row 后即可按名称访问列,可读性大大提高。

import sqlite3

conn = sqlite3.connect("ml.db")
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute("SELECT * FROM experiments")
row = cur.fetchone()
print(row["name"], row["accuracy"])

用于安全处理的上下文管理器

在连接上使用 with 时,成功后会自动提交,发生错误时会回滚。结合 closing 使用,可以确保资源得到清理。

import sqlite3
from contextlib import closing

with closing(sqlite3.connect("ml.db")) as conn:
    with conn:   # auto commit/rollback
        conn.execute(
            "INSERT INTO experiments (name, accuracy) VALUES (?, ?)",
            ("svm", 0.79),
        )

快速检查:持久化写入

您运行了几条 INSERT 语句,然后关闭了连接——但下次打开时数据却不见了。

回顾:使用 sqlite3 的 SQLite

现在您已经可以从 Python 使用真正的数据库:

  • sqlite3.connect 和 cursor
  • 使用 CREATE TABLE IF NOT EXISTS 创建安全的模式
  • 使用 INSERT、? 占位符和 executemany
  • 使用 conn.commit() 持久化写入
  • 使用 fetchone/fetchall、WHERE/ORDER BY/LIMIT
  • 使用 sqlite3.Row 和上下文管理器编写整洁、安全的代码

下一步:连接 pandas 和 SQL。

常见问题解答

「使用 Python 的 sqlite3 模块操作 SQLite」课时是免费的吗?

是的 — 「使用 Python 的 sqlite3 模块操作 SQLite」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「使用 Python 的 sqlite3 模块操作 SQLite」这节课中我会学到什么?

创建数据库和表,执行 INSERT/SELECT/UPDATE,使用参数化查询并管理连接 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用 Python 的 sqlite3 模块操作 SQLite」课时需要多长时间?

大多数 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