Python 操作 SQLite3 核心功能的表格化整理,涵盖连接、建表、CRUD 等核心操作,代码可直接复制使用: ### Python SQLite3 操作指令速查表

操作场景 Python 代码示例 说明/注意事项
连接数据库(文件) import sqlite3<br>conn = sqlite3.connect('mydb.db') 文件不存在时自动创建
支持绝对路径(如 '/data/mydb.db'
连接内存数据库(临时) conn = sqlite3.connect(':memory:') 程序关闭后数据丢失,适合临时测试场景
创建游标 cursor = conn.cursor() 所有 SQL 操作需通过游标执行
关闭连接 conn.close() (推荐)with sqlite3.connect('mydb.db') as conn: ... with 块自动提交事务并关闭连接,避免资源泄漏

表结构操作(DDL)

操作场景 Python 代码示例 说明
创建表(含约束) with conn:)
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)
''')
IF NOT EXISTS 避免重复创建
AUTOINCREMENT 自增主键
UNIQUE 唯一约束
查询所有表名 cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
print(cursor.fetchall())
通过系统表 sqlite_master 获取元数据
删除表 with conn:)
cursor.execute("DROP TABLE IF EXISTS users")
谨慎操作!数据无法恢复
添加列 with conn:)
cursor.execute("ALTER TABLE users ADD COLUMN age INTEGER")
SQLite 仅支持有限修改(如添加列),不支持删除/重命名列

数据操作(CRUD)

插入数据(Create)

场景 Python 代码示例 安全实践
单条插入 with conn:)
cursor.execute('''
INSERT INTO users (name, email) VALUES (?, ?)
''', ('Alice', 'a@example.com'))
? 占位符防 SQL 注入,参数以元组传递(即使单个参数也需加逗号)
批量插入 users = [('Bob', 'b@example.com'), ('Charlie', 'c@example.com')]
with conn:)
cursor.executemany('''
INSERT INTO users (name, email) VALUES (?, ?)
''', users)
executemany() 比循环单条插入效率更高

查询数据(Read)

场景 Python 代码示例 结果处理
查询所有记录 cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows: print(row) # 元组形式:(1, 'Alice', 'a@example.com')
fetchall() 返回元组列表,按列顺序取值
条件查询 cursor.execute("SELECT * FROM users WHERE age > ?", (28,))
results = cursor.fetchall()
条件参数用元组传递,避免直接拼接字符串
查询单条记录 cursor.execute("SELECT * FROM users WHERE id = ?", (1,))
user = cursor.fetchone() # 取第一条记录
fetchone() 返回单个元组,无结果时返回 None

更新数据(Update)

场景 Python 代码示例 注意事项
按条件更新 with conn:)
cursor.execute('''
UPDATE users SET email = ? WHERE name = ?
''', ('new@example.com', 'Alice'))
必须包含 WHERE 条件,避免全表更新

删除数据(Delete)

场景 Python 代码示例 注意事项
按条件删除 with conn:)
cursor.execute("DELETE FROM users WHERE id = ?", (1,))
WHERE 条件会删除全表数据!

事务与错误处理

场景 Python 代码示例 核心逻辑
手动事务控制
try:
cursor.execute("操作1")
cursor.execute("操作2")
conn.commit() # 成功则提交
except sqlite3.Error as e:
conn.rollback() # 失败则回滚
print("错误:", e)
确保一组操作要么全部成功,要么全部回滚
自动提交事务
with sqlite3.connect('mydb.db') as conn:)
cursor.execute("INSERT INTO users VALUES (..., ...)")
# 退出 with 块时自动提交
推荐写法!简化代码并避免忘记 commit

高级技巧

场景 Python 代码示例 用途
以字典形式返回结果
conn.row_factory = sqlite3.Row
cursor.execute("SELECT * FROM users")
row = cursor.fetchone()
print(dict(row)) # 输出: {'id': 1, 'name': 'Alice', ...}
方便通过字段名访问数据,提升可读性
使用可视化工具调试 安装 DB Browser for SQLite
直接打开 .db 文件执行 SQL
图形化查看表结构和数据,替代代码调试

最佳实践速记(进阶)

  1. 永远用 ? 占位符:防止 SQL 注入,如 cursor.execute("SELECT * FROM users WHERE name = ?", (user_name,))
  2. with 管理连接:自动处理事务提交和资源释放,避免代码遗漏。
  3. 批量操作首选 executemany:比循环单条插入效率高 10 倍以上。
  4. 调试用可视化工具:遇到数据问题时,用 DB Browser 直接查看文件内容。