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

SQLite 快速入门:基础知识与 Python 实战

SQLite 快速入门:基础知识与 Python 实战

什么是SQLite

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 不经过数据库服务器,而是由应用程序直接读写数据库文件。

SQLite有什么优点

  • 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  • SQLite 不需要配置,这意味着不需要安装或管理。
  • 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
  • SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
  • SQLite 是自给自足的,这意味着不需要任何外部的依赖。
  • SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
  • SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
  • SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
  • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

经典应用场景

一些人认为SQLite只能做玩具,实际上这是错误的。本地、离线、单程序读写、轻量存储的软件,几乎都会内置 SQLite。我们可以看下现有的应用场景

桌面软件

  1. 浏览器缓存与数据存储:Chrome、Edge、Firefox 全部用 SQLite 存:历史记录、Cookie、书签、下载记录、账号表单密码缓存。每个用户配置文件夹里一堆.sqlite文件。
  2. 社交软件:微信电脑版、QQ:聊天记录、本地缓存、文件索引全部存在 SQLite;
  3. 开发工具:VS Code、JetBrains IDE(IDEA、PyCharm):插件配置、打开文件历史、项目缓存;Git 客户端存储提交记录缓存。

移动端APP

  1. 安卓原生 APP 默认本地存储用 SQLite:微信、抖音、小红书本地缓存聊天、浏览记录、本地草稿;
  2. iOS(iPhone/iPad)底层同样封装 SQLite

嵌入式设备

设备算力弱、无独立数据库服务,SQLite 完美适配。

  1. 工业工控小设备、门禁、打卡机:本地存储打卡日志、人员信息
  2. 路由器、监控摄像头:设备日志、录像索引、设备连接记录

在Python中使用SQLite

sqlite3是 Python 的标准库,安装 Python 时就已经自带了。在你使用sqlite3库时,你不需要在你电脑上下载sqlite,因为Python 内部自带了一个完整的 SQLite 引擎

主要函数介绍

sqlite3.connect()→ 返回sqlite3.Connection

返回类型sqlite3.Connection对象

作用:代表与 SQLite 数据库文件的连接。它是整个数据库交互的"入口"。

主要功能:

  • 管理事务commit()提交、rollback()回滚
  • 创建游标cursor()方法
  • 直接执行 SQLexecute()executemany()
  • 关闭连接close()
conn.cursor()→ 返回sqlite3.Cursor

返回类型sqlite3.Cursor对象

作用:在连接之上执行 SQL 语句并获取结果。它是执行查询和遍历结果集的"游标/指针"。

主要功能:

  • 执行 SQLexecute()executemany()executescript()
  • 获取查询结果fetchone()(取一条)、fetchall()(取全部)、fetchmany(n)(取 N 条)

使用SQLite进行简单的CRUD

连接数据库

下面的 Python 代码显示了如何连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象。

importsqlite3 conn=sqlite3.connect('test.db')print("数据库打开成功")

在这里,您也可以把数据库名称修改为特定的名称:memory:,这样就会在 RAM内存 中创建一个数据库,**:memory:是临时数据库,进程结束就消失,不持久化。**如下面的 Python 代码。

importsqlite3 conn=sqlite3.connect(':memory:')print("数据库打开成功")

接下来的创建表和CRUD操作都以持久化数据库为例:memory:临时数据库的创建表和相关CRUD操作也与接下来的代码几乎一致,区别只有conn = sqlite3.connect(':memory:')

创建表

它会在test.db中创建 COMPANY 表

defcreate_table():conn=sqlite3.connect('example.db')print("Creating table in the database...")print("Opened database successfully")c=conn.cursor()c.execute('''CREATE TABLE IF NOT EXISTS COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);''')print("Table created successfully")conn.commit()conn.close()
INSERT 操作

它会在 COMPANY 表中创建给定记录

definsert_data():conn=sqlite3.connect('example.db')print("Inserting data into the database...")print("Opened database successfully")c=conn.cursor()c.execute("INSERT INTO COMPANY(ID,NAME,AGE,ADDRESS,SALARY)\ VALUES(1,'Paul',32,'California',20000.00)")c.execute("INSERT INTO COMPANY(ID,NAME,AGE,ADDRESS,SALARY)\ VALUES(2,'Allen',25,'Texas',15000.00)")c.execute("INSERT INTO COMPANY(ID,NAME,AGE,ADDRESS,SALARY)\ VALUES(3,'Teddy',23,'Norway',20000.00)")c.execute("INSERT INTO COMPANY(ID,NAME,AGE,ADDRESS,SALARY)\ VALUES(4,'Mark',25,'Rich-Mond ',65000.00)")conn.commit()print("Records created successfully")conn.close()
SELECT 操作
defquery_data():conn=sqlite3.connect('example.db')print("Querying data from the database...")print("Opened database successfully")c=conn.cursor()cursor=c.execute("SELECT id, name, address, salary from COMPANY")forrowincursor:print("ID = ",row[0])print("NAME = ",row[1])print("ADDRESS = ",row[2])print("SALARY = ",row[3],"\n")print("Querying Operation done successfully")conn.close()
UPDATE操作
defupdate_data():conn=sqlite3.connect('example.db')print("Updating data in the database...")print("Opened database successfully")c=conn.cursor()c.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1")conn.commit()print("Total number of rows updated :",conn.total_changes)conn.close()
DELETE操作
defdelete_data():conn=sqlite3.connect('example.db')print("Deleting data from the database...")print("Opened database successfully")c=conn.cursor()c.execute("DELETE from COMPANY where ID = 2;")conn.commit()print("Total number of rows deleted :",conn.total_changes)conn.close()

代码仓库

包含持久化和非持久化的使用示例

PersonalViolet/sqlite-demo

参考博客

SQLite – Python | 菜鸟教程

http://www.jsqmd.com/news/1153658/

相关文章:

  • 语音转换技术突破:Retrieval-based-Voice-Conversion-WebUI实现10分钟数据高效训练与实时变声
  • 《Linux文本编辑器学习笔记 vim命令+课后练习》
  • 免费在线法线贴图生成器:3分钟将普通图片变3D纹理的终极指南
  • Kueue 学习第三篇:安装、配额借用与优先级抢占
  • 174、VS Code 调试配置:launch.json、条件断点、logpoint、Debug Console 实战
  • CCRC数据安全资质全解析:从PIPA到CSERE,甲方到底认哪个?
  • 主权AI战略解析:韩国万卡GPU集群建设与开发者机遇
  • 告别网盘限速烦恼:9大平台直链下载工具全攻略
  • 别再只盯着TPS了!性能测试的最高境界,是看懂“排队论”
  • DINO自监督学习论文复现:ViT特征提取能力的实验验证
  • 搬家品牌的工程评估维度——日式搬家与普通搬家的技术差异
  • IRENE 多模态诊断模型:双向注意力机制解析与3类传统融合方案对比
  • 指标中心如何终结跨部门口径之争:统一定义、统一血缘、统一权限
  • AnyLogic 8.7 Windows安装避坑指南:环境兼容性与启动验证全解析
  • 如何高效配置暗黑3自动化助手:3步快速上手指南
  • 线下门店巡检到底做什么?一文说清
  • SAM ViT-B/L/H 三版本部署对比:RTX 4090 推理速度实测与显存占用分析
  • macOS Sonoma 14.7.3 启动介质构建原理与实操指南
  • 一张手绘草图,秒变专业 Visio 图表
  • 10分钟掌握ExifToolGUI:免费开源的照片元数据管理神器
  • AI 浏览器任务失败怎么排查:Context、Session、Page State 和 Task Log 检查清单
  • 如何用AKShare快速获取免费金融数据:Python开发者的终极指南
  • VLA训练避坑
  • 向量检索的 HNSW 参数调优:M、efConstruction 和 ef 的真实影响有多大
  • Meshroom免费3D建模神器:从照片到3D模型的快速完整指南
  • 如何用10分钟语音数据实现高效音色转换:Retrieval-based-Voice-Conversion-WebUI深度解析
  • 国际虚拟卡服务
  • WarcraftHelper:如何让你的魔兽争霸3在现代电脑上焕发新生?
  • 企业智能AI落地实战:从工具到生产力的三步走
  • SPT-AKI存档编辑器终极指南:3分钟完全掌控你的塔科夫离线世界