SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。
就像其他数据库,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。我们可以看下现有的应用场景
- 浏览器缓存与数据存储:Chrome、Edge、Firefox 全部用 SQLite 存:历史记录、Cookie、书签、下载记录、账号表单密码缓存。每个用户配置文件夹里一堆
.sqlite文件。 - 社交软件:微信电脑版、QQ:聊天记录、本地缓存、文件索引全部存在 SQLite;
- 开发工具:VS Code、JetBrains IDE(IDEA、PyCharm):插件配置、打开文件历史、项目缓存;Git 客户端存储提交记录缓存。
- 安卓原生 APP 默认本地存储用 SQLite:微信、抖音、小红书本地缓存聊天、浏览记录、本地草稿;
- iOS(iPhone/iPad)底层同样封装 SQLite
设备算力弱、无独立数据库服务,SQLite 完美适配。
- 工业工控小设备、门禁、打卡机:本地存储打卡日志、人员信息
- 路由器、监控摄像头:设备日志、录像索引、设备连接记录
sqlite3 是 Python 的标准库,安装 Python 时就已经自带了。在你使用sqlite3库时,你不需要在你电脑上下载sqlite,因为Python 内部自带了一个完整的 SQLite 引擎。
返回类型:sqlite3.Connection 对象
作用:代表与 SQLite 数据库文件的连接。它是整个数据库交互的"入口"。
主要功能:
- 管理事务:
commit()提交、rollback()回滚 - 创建游标:
cursor()方法 - 直接执行 SQL:
execute()、executemany()等 - 关闭连接:
close()
返回类型:sqlite3.Cursor 对象
作用:在连接之上执行 SQL 语句并获取结果。它是执行查询和遍历结果集的"游标/指针"。
主要功能:
- 执行 SQL:
execute()、executemany()、executescript() - 获取查询结果:
fetchone()(取一条)、fetchall()(取全部)、fetchmany(n)(取 N 条)
下面的 Python 代码显示了如何连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象。
import sqlite3
conn = sqlite3.connect('test.db')
print ("数据库打开成功")在这里,您也可以把数据库名称修改为特定的名称 :memory:,这样就会在 RAM内存 中创建一个数据库,**:memory: 是临时数据库,进程结束就消失,不持久化。**如下面的 Python 代码。
import sqlite3
conn = sqlite3.connect(':memory:')
print ("数据库打开成功")接下来的创建表和CRUD操作都以持久化数据库为例。:memory:临时数据库的创建表和相关CRUD操作也与接下来的代码几乎一致,区别只有conn = sqlite3.connect(':memory:')
它会在 test.db 中创建 COMPANY 表
def create_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()它会在 COMPANY 表中创建给定记录
def insert_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()def query_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")
for row in cursor:
print("ID = ", row[0])
print("NAME = ", row[1])
print("ADDRESS = ", row[2])
print("SALARY = ", row[3], "\n")
print("Querying Operation done successfully")
conn.close()def update_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()def delete_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()包含持久化和非持久化的使用示例