使用 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 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 Python 的 sqlite3 模块操作 SQLite
- Pandas 与 SQL 集成
- 存储和查询机器学习结果
- 向量数据库简介