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

打印 上一主题 下一主题

主题 1795|帖子 1795|积分 5385

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

目录


  • 什么是 SQLite3?
  • 环境预备
  • 连接数据库
  • 创建表
  • 增删改查(CRUD)
  • 事务与错误处理
  • 高级技巧
  • 常见问题
  • 总结

1. 什么是 SQLite3?

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


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

2. 环境预备

2.1 确认 Python 环境

确保已安装 Python(建议 3.6+)。打开终端输入以下下令:
  1. python --version
复制代码
若显示版本号(如 Python 3.8.5)则正常。若报错,需先 安装 Python。
2.2 导入 SQLite3 模块

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

3. 连接数据库

3.1 连接到磁盘数据库(长期化)

  1. # 连接到当前目录下的 test.db 文件(不存在则自动创建)
  2. conn = sqlite3.connect('test.db')
复制代码


  • 文件路径规则

    • 'test.db':当前目录下的 test.db 文件。
    • '/home/user/data.db':绝对路径指定位置。

  • 注意:关闭程序后文件依然存在,下次可重新连接。
3.2 连接到内存数据库(暂时利用)

  1. conn = sqlite3.connect(':memory:')  # 程序关闭后数据消失
复制代码
3.3 创建游标(操作数据库的“手”)

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

4. 创建表

4.1 基本语法

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

类型说明INTEGER整数(如 1, -5, 100)TEXT字符串(如 “Hello”)REAL浮点数(如 3.14)BLOB二进制数据(如图片) 4.3 验证表是否创建成功

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

5. 增删改查(CRUD)

5.1 插入数据(Create)

插入单条数据

  1. # 使用 ? 占位符避免 SQL 注入
  2. cursor.execute('''
  3.     INSERT INTO users (name, age, email)
  4.     VALUES (?, ?, ?)
  5. ''', ('Alice', 30, 'alice@example.com'))
  6. conn.commit()  # 提交!
复制代码
批量插入数据

  1. users = [
  2.     ('Bob', 25, 'bob@example.com'),
  3.     ('Charlie', 35, 'charlie@example.com')
  4. ]
  5. cursor.executemany('''
  6.     INSERT INTO users (name, age, email) VALUES (?, ?, ?)
  7. ''', users)
  8. conn.commit()
复制代码
5.2 查询数据(Read)

查询全部记载

  1. cursor.execute('SELECT * FROM users')
  2. rows = cursor.fetchall()  # 获取全部结果
  3. for row in rows:
  4.     print(row)  # 输出:(1, 'Alice', 30, 'alice@example.com')
复制代码
条件查询

  1. # 查找年龄大于 28 的用户
  2. cursor.execute('SELECT * FROM users WHERE age > ?', (28,))
  3. results = cursor.fetchall()
  4. for row in results:
  5.     print(f"ID: {row[0]}, 姓名: {row[1]}, 年龄: {row[2]}")
复制代码
查询单条记载

  1. cursor.execute('SELECT * FROM users WHERE id = ?', (1,))
  2. user = cursor.fetchone()  # 只获取第一条
  3. print(user)  # 输出:(1, 'Alice', 30, 'alice@example.com')
复制代码
5.3 更新数据(Update)

  1. # 将 Alice 的邮箱更新为 new_email@example.com
  2. cursor.execute('''
  3.     UPDATE users
  4.     SET email = ?
  5.     WHERE name = ?
  6. ''', ('new_email@example.com', 'Alice'))
  7. conn.commit()
复制代码
5.4 删除数据(Delete)

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

6. 事务与错误处理

6.1 什么是事务?



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

  1. try:
  2.     cursor.execute("INSERT INTO users (name) VALUES ('David')")
  3.     cursor.execute("INSERT INTO users (name) VALUES ('Eve')")
  4.     conn.commit()  # 成功则提交
  5. except sqlite3.Error as e:
  6.     print("出错啦:", e)
  7.     conn.rollback()  # 失败则回滚(撤销所有操作)
复制代码
6.3 自动提交(推荐)

利用 with 上下文管理器:
  1. with sqlite3.connect('test.db') as conn:
  2.     cursor = conn.cursor()
  3.     cursor.execute("INSERT INTO users (name) VALUES ('Frank')")
  4.     # 无需 commit,退出 with 块时自动提交
复制代码

7. 高级技巧

7.1 以字典情势返回结果

默认返回元组,可通过 row_factory 改为字典:
  1. def dict_factory(cursor, row):
  2.     return {col[0]: row[idx] for idx, col in enumerate(cursor.description)}
  3. conn.row_factory = dict_factory
  4. cursor = conn.cursor()
  5. cursor.execute('SELECT * FROM users WHERE id = 1')
  6. print(cursor.fetchone())  # 输出:{'id': 1, 'name': 'Alice', ...}
复制代码
7.2 利用 SQLite 欣赏器查看数据

推荐工具:DB Browser for SQLite


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

8. 常见问题

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



  • 检查当前目录:在代码中添加:
    1. import os
    2. print(os.getcwd())  # 查看文件实际保存路径
    复制代码
  • 利用绝对路径:如 sqlite3.connect('/User/name/data.db')
Q2:插入数据后查询不到?



  • 忘记提交事务:确保执行 conn.commit()。
  • 查询条件错误:检查 WHERE 子句是否拼写精确。
Q3:如何备份数据库?

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

9. 总结

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

  • 连接数据库(文件 vs 内存)
  • 创建表(字段类型与束缚)
  • 增删改查(参数化查询防注入)
  • 事务管理(提交与回滚)
  • 高级技巧(字典结果、可视化工具)
下一步建议


  • 实验为当地的通讯录、笔记应用添加数据库支持。
  • 学习更复杂的 SQL 语法(如 JOIN 查询)。
遇到问题? 随时查阅本文代码示例,或利用 SQLite 欣赏器调试!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表