当前位置: 首页 > news >正文

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

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

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


目录

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

1. 什么是 SQLite3?

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

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

2. 环境准备

2.1 确认 Python 环境

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

python --version

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

2.2 导入 SQLite3 模块

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

import sqlite3

3. 连接数据库

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

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

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

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

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

cursor = conn.cursor()  # 所有 SQL 操作通过游标执行

4. 创建表

4.1 基本语法

# 创建 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 验证表是否创建成功

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

5. 增删改查(CRUD)

5.1 插入数据(Create)

插入单条数据
# 使用 ? 占位符避免 SQL 注入
cursor.execute('''INSERT INTO users (name, age, email)VALUES (?, ?, ?)
''', ('Alice', 30, 'alice@example.com'))
conn.commit()  # 提交!
批量插入数据
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)

查询所有记录
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()  # 获取全部结果
for row in rows:print(row)  # 输出:(1, 'Alice', 30, 'alice@example.com')
条件查询
# 查找年龄大于 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]}")
查询单条记录
cursor.execute('SELECT * FROM users WHERE id = ?', (1,))
user = cursor.fetchone()  # 只获取第一条
print(user)  # 输出:(1, 'Alice', 30, 'alice@example.com')

5.3 更新数据(Update)

# 将 Alice 的邮箱更新为 new_email@example.com
cursor.execute('''UPDATE usersSET email = ?WHERE name = ?
''', ('new_email@example.com', 'Alice'))
conn.commit()

5.4 删除数据(Delete)

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

6. 事务与错误处理

6.1 什么是事务?

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

6.2 手动提交与回滚

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 上下文管理器:

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 改为字典:

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:代码运行后找不到数据库文件?

  • 检查当前目录:在代码中添加:
    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 浏览器调试!

相关文章:

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

Python SQLite3 保姆级教程:从零开始学数据库操作 本文适合纯新手!无需任何数据库基础,跟着步骤操作即可掌握 SQLite3 的核心用法。 目标:让你像用记事本一样轻松操作数据库! 目录 什么是 SQLite3?环境准…...

深度解析:视频软编码与硬编码的优劣对比

视频编码 一、基本原理与核心技术 压缩原理 通过时空冗余消除实现数据压缩: 空间冗余:利用帧内预测(如DC/角度预测)消除单帧内相邻像素相似性。时间冗余:运动估计与补偿技术(ME/MC)减少连续帧间…...

Azure云生态系统详解:核心服务、混合架构与云原生概念

核心服务:深入掌握Azure SQL Database、Azure Database for PostgreSQL、Azure Database for MySQL的架构、备份恢复、高可用性配置(如Geo-Replication、自动故障转移组、异地冗余备份)。混合架构:熟悉Azure Arc(管理混…...

人工智能之数学基础:正交矩阵

本文重点 正交矩阵是线性代数中一个重要的特殊矩阵,它在许多领域都有广泛的应用。 什么是正交矩阵 如图所示,当矩阵A满足如上所示的条件的时候,此时我们就可以认为是正交矩阵,需要注意一点矩阵A必为方阵。 正交矩阵的充要条件 …...

分布式锁—7.Curator的分布式锁

大纲 1.Curator的可重入锁的源码 2.Curator的非可重入锁的源码 3.Curator的可重入读写锁的源码 4.Curator的MultiLock源码 5.Curator的Semaphore源码 1.Curator的可重入锁的源码 (1)InterProcessMutex获取分布式锁 (2)InterProcessMutex的初始化 (3)InterProcessMutex.…...

【笔记】STM32L4系列使用RT-Thread Studio电源管理组件(PM框架)实现低功耗

硬件平台:STM32L431RCT6 RT-Thread版本:4.1.0 目录 一.新建工程 二.配置工程 ​编辑 三.移植pm驱动 四.配置cubeMX 五.修改驱动文件,干掉报错 六.增加用户低功耗逻辑 1.设置唤醒方式 2.设置睡眠时以及唤醒后动作 ​编辑 3.增加测试命…...

C++什么是深复制和浅复制,构造函数和析构函数,哪一个可以写成虚函数,为什么?

在C之中深复制是指对于值类型复制它的值,对于指针类型不仅仅复制指针指向的值,还会重新分配一个内存空间用于放置复制的值(对动态分配的内存进行重新分配和内存复制),这种深复制不会出现悬空指针的问题,但是…...

从连接到交互:SDN 架构下 OpenFlow 协议的流程与报文剖析

在SDN架构中,交换机与控制器之间的通信基于 OpenFlow协议,其设计目的是实现控制平面与数据平面的解耦。以下是 交换机连接控制器 和 数据包进入交换机触发交互 的详细流程及协议报文分析: 一、交换机连接控制器的流程(初始化阶段&…...

第七课:Python反爬攻防战:Headers/IP代理与验证码

在爬虫开发过程中,反爬虫机制成为了我们必须面对的挑战。本文将深入探讨Python爬虫中常见的反爬机制,并详细解析如何通过随机User-Agent生成、代理IP池搭建以及验证码识别来应对这些反爬策略。文章将包含完整的示例代码,帮助读者更好地理解和…...

Golang学习笔记_47——访问者模式

Golang学习笔记_44——命令模式 Golang学习笔记_45——备忘录模式 Golang学习笔记_46——状态模式 文章目录 一、核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、特点分析三、适用场景1. 编译器实现2. 财务系统3. UI组件系统 四、Go语言实现示例完整实现代码执行结果 五、…...

软件高级架构师 - 软件工程

补充中 测试 测试类型 静态测试 动态测试 测试阶段 单元测试中,包含性能测试,如下: 集成测试中,包含以下: 维护 遗留系统处置 高水平低价值:采取集成 对于这类系统,采取 集成 的方式&…...

IDEA 基础配置: maven配置 | 服务窗口配置

文章目录 IDEA版本与MAVEN版本对应关系maven配置镜像源插件idea打开服务工具窗口IDEA中的一些常见问题及其解决方案IDEA版本与MAVEN版本对应关系 查找发布时间在IDEA版本之前的dea2021可以使用maven3.8以及以前的版本 比如我是idea2021.2.2 ,需要将 maven 退到 apache-maven-3.…...

Qt之QGraphicsView图像操作

QGraphicsView图像操作:旋转、放大、缩小、移动、图层切换 1 摘要 GraphicsView框架结构主要包含三个主要的类QGraphicsScene(场景)、QGraphicsView(视图)、QGraphicsItem(图元)。QGraphicsScene本身不可见,是一个存储图元的容器,必须通过与之相连的QGraphicsView视图来显…...

人工智能之数学基础:对线性代数中逆矩阵的思考?

本文重点 逆矩阵是线性代数中的一个重要概念,它在线性方程组、矩阵方程、动态系统、密码学、经济学和金融学以及计算机图形学等领域都有广泛的应用。通过了解逆矩阵的定义、性质、计算方法和应用,我们可以更好地理解和应用线性代数知识,解决各种实际问题。 关于逆矩阵的思…...

嵌入式开发之串行数据处理

前题 前面几篇文章写了关于嵌入式软件开发时,关于串行数据处理的一些相关内容,有兴趣的可以看看《嵌入式开发:软件架构、驱动开发与串行数据处理》、《嵌入式软件开发之生产关系模型》和《嵌入式开发之Modbus-RTU协议解析》相关的内容。从业十…...

机器学习(六)

一,决策树: 简介: 决策树是一种通过构建类似树状的结构(颠倒的树),从根节点开始逐步对数据进行划分,最终在叶子节点做出预测结果的模型。 结构组成: 根节点:初始的数据集…...

结合unittest和pytest进行虚拟数据库测试

使用 pytest 和 MagicMock 模拟数据库操作,并测试假设的 create_user 函数,将用户添加到数据库中。 代码实现 from datetime import date from typing import List, Optional from unittest.mock import MagicMock from pydantic import BaseModel, Fi…...

Spring Boot 监听器(Listeners)详细教程

Spring Boot 监听器(Listeners)详细教程 目录 Spring Boot 监听器概述监听器核心概念最佳使用场景实现步骤高级配置详细使用场景总结 1. Spring Boot 监听器概述 Spring Boot 监听器(Listeners)基于 Spring Framework 的事件机制…...

工具介绍《githack》以及Git 命令行

一、Githack 工具介绍 Githack 是一个用于检测和利用网站 .git 目录泄露漏洞的安全工具。当网站错误配置导致 .git 目录可公开访问时,攻击者可通过该工具下载 .git 中的版本控制文件,并重建完整的项目源代码。 核心用途 检测 .git 目录泄露漏洞。从泄…...

【hello git】git rebase、git merge、git stash、git cherry-pick

目录 一、git merge:保留了原有分支的提交结构 二、git rebase:提交分支更加整洁 三、git stash 四、git cherry-pick 共同点:将 一个分支的提交 合并到 到另一个上分支上去 一、git merge:保留了原有分支的提交结构 现有一个模型…...

MR的环形缓冲区(底层)

MapReduce的大致流程: 1、HDFS读取数据; 2、按照规则进行分片,形成若干个spilt; 3、进行Map 4、打上分区标签(patition) 5、数据入环形缓冲区(KVbuffer) 6、原地排序&#xff…...

下载Hugging Face模型的几种方式

1.网页下载 直接访问Hugging Face模型页面,点击“File and versions”选项卡,选择所需的文件进行下载。 2.使用huggingface-cli 首先,安装huggingface_hub: pip install huggingface_hub 然后,使用以下命令下载模型&#xff1…...

Java 第十一章 GUI编程(2)

目录 GUI 事件处理 基本思路 添加事件监听器 对话框 实例 GUI 事件处理 对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前为止, 我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能&…...

Redis数据结构深度解析:从String到Stream的奇幻之旅(一)

Redis系列文章 《半小时掌握Redis核心操作:从零开始的实战指南》-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(一)-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(二&…...

7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030

WD5030 具备 7V 至 30V 的超宽 VIN 输入范围,这一特性使其能够适应多种不同电压等级的供电环境,无论是在工业设备中常见的较高电压输入,还是在一些便携式设备经过初步升压后的电压,WD5030 都能轻松应对,极大地拓展了应…...

【Git原理与使用一】Git概念与基本操作

文章目录 1. Git 的概念2. Git 的安装3. Git 的认识3.1 创建本地仓库3.2 配置Git3.3 认识工作区、暂存区、版本库 4. Git 的基本操作4.1、认识几个指令1)git add 添加命令2)git commit 提交命令3)git log 查看日志命令4)git cat-f…...

kettle工具使用从入门到精通(一)

安装 可以从链接: 官网(下载链接在Pentaho.pdf文件里)或者网络上查找对应的版本安装 Kettle (PDI) 版本与 JDK 版本对应关系 Kettle (PDI) 版本支持的 JDK 版本备注PDI 9.x 及以上JDK 11 或更高版本推荐使用 OpenJDK 或 Oracle JDK 11。PDI 8.xJDK 8 …...

Java 实现 Oracle 的 MONTHS_BETWEEN 函数

介绍 因为系统迁移, 有一些函数要转成 Java 版本, Oracle 的 官方介绍 - MONTHS_BETWEEN MONTHS_BETWEEN returns number of months between dates date1 and date2. The month and the last day of the month are defined by the parameter NLS_CALENDAR. If date1 is late…...

windows下使用msys2编译ffmpeg

三种方法: 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译(有环境变量) 3、在msys2中使用visual studio编译(无环境变量) 我的环境: 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...

Vivado常用的时序约束方法

1,create_clock :创建时钟约束 create_clock -period 20.000 -name sys_clk [get_ports sys_clk 该约束含义是创建一个时钟周期20ns的时钟,时钟名字为sys_clk。注意:如果是差分时钟,只需要约束差分时钟的P端,N端不用约束。 2,set_clock_uncertainty:设置时钟不确定性 s…...