一、前言:什么是 SQLite?

SQLite 是 Python 自带的轻量级文件型数据库,不需要安装、不需要配置服务,一个 .db 文件就是一个完整的数据库,非常适合小型项目和本地数据存储。

本文将带你实现数据库的 4 个核心操作(增、删、改、查),并附上逐行代码解释,保证你看完就能上手。

二、SQLite 核心特点

  1. 零安装、零配置

    不需要像 MySQL 一样安装服务、配置账号密码,导入模块就能直接操作。
  2. 文件型数据库

    所有数据表、数据全部保存在单个 .db 文件中,复制文件即可完成备份与迁移。
  3. 无服务器架构

    属于嵌入式数据库,依附程序运行,占用资源极低,适合本地小型存储。
  4. 支持标准 SQL 语法

    完全通用 SQL 语句,掌握后可无缝衔接 MySQL、Oracle 等主流数据库。
    1. 跨平台兼容Windows / Mac / Linux / 移动端全平台通用,兼容性极强。

  5. 支持事务机制

    具备事务提交、回滚能力,保证数据操作安全,防止数据错乱。
  6. 免费开源

    个人、商用项目都可以免费使用,无版权限制。

三、适用场景

1、学生学习 SQL 语法、数据库入门练习

2、小型桌面程序、本地工具数据存储

3、爬虫本地缓存、简易数据持久化

4、轻量化项目、离线软件本地存储

5、移动端、嵌入式设备数据保存

四、准备工作

只需要安装好 Python 环境即可,无需额外安装任何库,sqlite3 是 Python 自带模块。

五、逐步代码详细解释(可直接运行)

1、模块的导入

命令:import sqlite3

2、连接数据库

# 连接数据库,如果 mydata.db 文件不存在,会自动创建

create_sql = sqlite3.connect('mydata.db')         # 创建打开数据库文件

# 检测数据库是否连接成功

print("数据库连接成功")         # 文件生成在你代码同目录下

运行结果如下:

注意:如果没生成你.db文件就代表代码没实现。具体看报错问题。

3、创建游标(相当于数据库的"操作手柄")

# 创建游标(相当于数据库的"操作手柄")

# 所有增删改查操作,都必须通过游标来执行

cursor = create_sql.cursor()         # 相当于数据库操作手柄

# 检测是否创建成功

print("\n游标创建成功")

运行结果如下:

4、创建数据表(如果表不存在才创建)

# 创建数据表(如果表不存在才创建)

# 表名:user

# 字段说明:

# - id:主键,自动增长,每条数据的唯一标识

# - username:用户名,文本类型,不能为空

# - age:年龄,整数类型

# - address:地址,文本类型

sql = '''

CREATE TABLE IF NOT EXISTS user(

    id INTEGER PRIMARY KEY AUTOINCREMENT,

    username TEXT NOT NULL,

    address TEXT,

    age INTEGER

    )

'''

cursor.execute(sql)

# 检测数据表是否创建成功

print("\n数据表创建成功")

运行结果如下:

5. 插入数据(增 C - Create)

# 插入数据

# 使用 ? 占位符传递数据,安全又不容易出错

cursor.execute( "INSERT INTO user (username, age, address) VALUES (?, ?, ?)", ("张三", 20, "北京") )

# 提交事务,将数据真正写入数据库

create_sql.commit()

# 检测数据是否插入成功

print("数据插入成功")

运行结果如下:

6、查询验证数据

# 查询验证数据

# SELECT * FROM user:查询 user 表中的所有数据,* 代表查询所有字段

# fetchall():获取所有查询结果,返回格式为 列表套元组,例如 [(1, '张三', 20, '北京')]

# 除了 fetchall(),还有两个常用方法:

# 1、fetchone():只获取查询结果的第一条数据

# 2、fetchmany(n):获取查询结果的前 n 条数据

cursor.execute("SELECT * FROM user")

result = cursor.fetchone()

# 验证数据查询的数据是否与我们写入的一致。

print(f"\n打印查询的结果:{result}")

运行结果如下:

7. 修改数据

# UPDATE user SET age = ? WHERE username = ?:修改数据的 SQL 语句

# SET age = ?:指定要修改的字段和新值

# WHERE username = ?:定位要修改的目标数据,避免修改所有数据

# create_sql.commit():提交事务,保存修改

# 1、执行修改操作

cursor.execute(

    "UPDATE user SET age = ? WHERE username = ?",

    (40, "张三")

)

提交事务,保存修改

create_sql.commit()

# 2. 重新查询数据,才能看到修改后的结果

cursor.execute("SELECT * FROM user WHERE username = ?", ("张三",))

change_result = cursor.fetchone()

print(f"\n打印修改后的结果:{change_result}")

注意:查询的时候,取到的是第一条修改后的数据,所以会看不到变化,最好删掉.db文件重新执行就可以看到变化。

运行结果如下:

8. 删除数据

# 1. 执行删除操作

cursor.execute(

    "DELETE FROM user WHERE username = ?",

    ("张三",)  # 注意这里必须是元组,单个值后面要加逗号

)

 # 必须提交事务,删除才会生效

create_sql.commit()

print("数据删除成功")

# 2. 删除后查询验证(确认数据已经被删掉)

cursor.execute("SELECT * FROM user WHERE username = ?", ("张三",))

delete_result = cursor.fetchone()

print(f"删除后查询结果:{delete_result}") # None = 数据库里已经没有这条数据了,删除成功

运行结果如下:

9、关闭连接

# 关闭连接

cursor.close()

create_sql.close()

操作结束必须关闭,释放系统资源,避免占用。

六、常见报错解决方案

  1. 表不存在报错第一次运行自动建表,不要先执行插入、查询语句。

  2. 字段不存在报错修改了表结构后,删除旧 mydata.db 文件,重新运行生成新表。

  3. 数据不保存增删改操作后,必须加 conn.commit() 提交事务。

更多推荐