当前位置: 首页 > 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:保留了原有分支的提交结构 现有一个模型…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...