Python SQLite3 保姆级教程:从零开始学数据库操作

Python SQLite3 保姆级教程:从零开始学数据库操作

本文适合纯新手!无需任何数据库基础,跟着步骤操作即可掌握 SQLite3 的核心用法。
目标:让你像用记事本一样轻松操作数据库!


目录

  1. [什么是 SQLite3?](#什么是 SQLite3?)
  2. 环境准备
  3. 连接数据库
  4. 创建表
  5. 增删改查(CRUD)
  6. 事务与错误处理
  7. 高级技巧
  8. 常见问题
  9. 总结

1. 什么是 SQLite3?

SQLite3 是一个轻量级的 嵌入式数据库,无需安装独立服务,所有数据存储在一个文件中。

  • 无需配置:像操作普通文件一样使用。
  • 跨平台:数据库文件可在 Windows/macOS/Linux 共享。
  • 适合小型项目:APP 配置、本地缓存、小型网站等。

2. 环境准备

2.1 确认 Python 环境

确保已安装 Python(建议 3.6+)。打开终端输入以下命令:

bash 复制代码
python --version

若显示版本号(如 Python 3.8.5)则正常。若报错,需先 安装 Python

2.2 导入 SQLite3 模块

无需额外安装 !Python 自带 sqlite3 库,直接在代码中导入:

python 复制代码
import sqlite3

3. 连接数据库

3.1 连接到磁盘数据库(持久化)

python 复制代码
# 连接到当前目录下的 test.db 文件(不存在则自动创建)
conn = sqlite3.connect('test.db')
  • 文件路径规则
    • 'test.db':当前目录下的 test.db 文件。
    • '/home/user/data.db':绝对路径指定位置。
  • 注意:关闭程序后文件依然存在,下次可重新连接。

3.2 连接到内存数据库(临时使用)

python 复制代码
conn = sqlite3.connect(':memory:')  # 程序关闭后数据消失

3.3 创建游标(操作数据库的"手")

python 复制代码
cursor = conn.cursor()  # 所有 SQL 操作通过游标执行

4. 创建表

4.1 基本语法

python 复制代码
# 创建 users 表(如果不存在)
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,  # 自增主键
        name TEXT NOT NULL,                    # 文本类型,不能为空
        age INTEGER,                           # 整数类型
        email TEXT UNIQUE                      # 唯一约束(邮箱不可重复)
    )
''')
conn.commit()  # 提交事务(创建表需要提交)

4.2 字段类型

类型 说明
INTEGER 整数(如 1, -5, 100)
TEXT 字符串(如 "Hello")
REAL 浮点数(如 3.14)
BLOB 二进制数据(如图片)

4.3 验证表是否创建成功

python 复制代码
# 查询数据库中所有表名
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
print(cursor.fetchall())  # 输出:[('users',)]

5. 增删改查(CRUD)

5.1 插入数据(Create)

插入单条数据
python 复制代码
# 使用 ? 占位符避免 SQL 注入
cursor.execute('''
    INSERT INTO users (name, age, email)
    VALUES (?, ?, ?)
''', ('Alice', 30, 'alice@example.com'))
conn.commit()  # 提交!
批量插入数据
python 复制代码
users = [
    ('Bob', 25, 'bob@example.com'),
    ('Charlie', 35, 'charlie@example.com')
]
cursor.executemany('''
    INSERT INTO users (name, age, email) VALUES (?, ?, ?)
''', users)
conn.commit()

5.2 查询数据(Read)

查询所有记录
python 复制代码
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()  # 获取全部结果
for row in rows:
    print(row)  # 输出:(1, 'Alice', 30, 'alice@example.com')
条件查询
python 复制代码
# 查找年龄大于 28 的用户
cursor.execute('SELECT * FROM users WHERE age > ?', (28,))
results = cursor.fetchall()
for row in results:
    print(f"ID: {row[0]}, 姓名: {row[1]}, 年龄: {row[2]}")
查询单条记录
python 复制代码
cursor.execute('SELECT * FROM users WHERE id = ?', (1,))
user = cursor.fetchone()  # 只获取第一条
print(user)  # 输出:(1, 'Alice', 30, 'alice@example.com')

5.3 更新数据(Update)

python 复制代码
# 将 Alice 的邮箱更新为 new_email@example.com
cursor.execute('''
    UPDATE users
    SET email = ?
    WHERE name = ?
''', ('new_email@example.com', 'Alice'))
conn.commit()

5.4 删除数据(Delete)

python 复制代码
# 删除 ID 为 2 的用户
cursor.execute('DELETE FROM users WHERE id = ?', (2,))
conn.commit()

6. 事务与错误处理

6.1 什么是事务?

  • 事务:一组原子性的操作,要么全部成功,要么全部失败。
  • 示例:转账操作(A 扣款,B 加款必须同时成功)。

6.2 手动提交与回滚

python 复制代码
try:
    cursor.execute("INSERT INTO users (name) VALUES ('David')")
    cursor.execute("INSERT INTO users (name) VALUES ('Eve')")
    conn.commit()  # 成功则提交
except sqlite3.Error as e:
    print("出错啦:", e)
    conn.rollback()  # 失败则回滚(撤销所有操作)

6.3 自动提交(推荐)

使用 with 上下文管理器:

python 复制代码
with sqlite3.connect('test.db') as conn:
    cursor = conn.cursor()
    cursor.execute("INSERT INTO users (name) VALUES ('Frank')")
    # 无需 commit,退出 with 块时自动提交

7. 高级技巧

7.1 以字典形式返回结果

默认返回元组,可通过 row_factory 改为字典:

python 复制代码
def dict_factory(cursor, row):
    return {col[0]: row[idx] for idx, col in enumerate(cursor.description)}

conn.row_factory = dict_factory
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE id = 1')
print(cursor.fetchone())  # 输出:{'id': 1, 'name': 'Alice', ...}

7.2 使用 SQLite 浏览器查看数据

推荐工具:DB Browser for SQLite

  • 可视化查看表结构、数据。
  • 直接执行 SQL 语句。

8. 常见问题

Q1:代码运行后找不到数据库文件?

  • 检查当前目录 :在代码中添加:

    python 复制代码
    import os
    print(os.getcwd())  # 查看文件实际保存路径
  • 使用绝对路径 :如 sqlite3.connect('/User/name/data.db')

Q2:插入数据后查询不到?

  • 忘记提交事务 :确保执行 conn.commit()
  • 查询条件错误:检查 WHERE 子句是否拼写正确。

Q3:如何备份数据库?

直接复制 .db 文件即可!SQLite 数据库是单一文件。


9. 总结

通过本教程,你已经学会了:

  1. 连接数据库(文件 vs 内存)
  2. 创建表(字段类型与约束)
  3. 增删改查(参数化查询防注入)
  4. 事务管理(提交与回滚)
  5. 高级技巧(字典结果、可视化工具)

下一步建议

  • 尝试为本地的通讯录、笔记应用添加数据库支持。
  • 学习更复杂的 SQL 语法(如 JOIN 查询)。

遇到问题? 随时查阅本文代码示例,或使用 SQLite 浏览器调试!

相关推荐
Zhansiqi15 分钟前
dayy43
pytorch·python·深度学习
不想看见40426 分钟前
Qt 项目中实现良好封装(模块化设计)的详细流程指南
数据库·系统架构
mygljx34 分钟前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
Jeremy爱编码37 分钟前
软考数据库
数据库
紫丁香38 分钟前
pytest_自动化测试3
开发语言·python·功能测试·单元测试·集成测试·pytest
杰杰79841 分钟前
Python面向对象——类的魔法方法
开发语言·python
chushiyunen1 小时前
python中的魔术方法(双下划线)
前端·javascript·python
深蓝轨迹1 小时前
@Autowired与@Resource:Spring依赖注入注解核心差异剖析
java·python·spring·注解
人工智能AI技术1 小时前
Python 3.14.3更新!内存优化与安全补丁实战应用
python
2401_891655811 小时前
此电脑网络位置异常的AD域排错指南的技术文章大纲
开发语言·python·算法