火星科技网您的位置:首页 >科普解惑 > 知识分享 >

sqlite3 的常用使用方法 基础操作详解

导读 sqlite3 是轻量级嵌入式关系型数据库,不需要独立数据库服务进程,整个数据库就是一个单独文件,支持标准 SQL 语法,适合本地小项目 桌

sqlite3 是轻量级嵌入式关系型数据库,不需要独立数据库服务进程,整个数据库就是一个单独文件,支持标准 SQL 语法,适合本地小项目 桌面软件 移动端 脚本程序存储数据,它的常用使用方法包含命令行操作和编程语言调用两大块,命令行主要用来建库建表 增删改查 导出导入 查看库结构,编程语言调用一般是 Python C 语言等内置 sqlite3 模块,在代码里连接数据库执行 SQL 语句,很多新手容易混淆 sqlite3 命令行工具和 sqlite3 编程模块,两者都叫 sqlite3,但是用途不一样,命令行是独立可执行程序,编程模块是代码库,sqlite3 最大优势是零部署,创建数据库直接生成后缀 db 文件,断电崩溃也有事务回滚机制,支持事务 索引 视图,缺点是不适合高并发多用户同时写入,高并发场景会出现锁冲突,日常学习和中小型本地存储优先掌握连接 建表 增删改查 事务这几个核心操作。

命令行基础操作

启动与连接数据库

打开终端,输入 sqlite3 数据库文件名,如果这个 db 文件不存在就会自动新建数据库,存在就直接打开连接,进入 sqlite 交互提示符。

退出交互界面,输入.quit 或者.exit。

查看当前数据库所有表,输入.tables

查看表完整建表语句,输入.schema 表名

查看数据库文件信息,输入.databases

建表语句

create table student

id integer primary key autoincrement

name text not null

age integer

score real

sqlite3 支持的数据类型主要有 integer 整数,real 浮点数,text 文本,blob 二进制数据,它是动态类型,就算定义类型,也不会像 mysql 那样严格校验类型,这个是 sqlite3 很重要的特点。

增删改查核心 SQL

新增数据 insert into student name age score values 张三 18 90.5

查询数据 select from student where age > 17

更新数据 update student set score 95 where id 1

删除数据 delete from student where id 1

事务操作

sqlite3 默认自动提交事务,如果需要手动事务,输入 begin 开启事务,执行多条 SQL 之后输入 commit 提交,如果出错输入 rollback 回滚,事务可以保证多条操作要么全部成功要么全部失败,防止数据半截写入。

导入导出

导出整张表数据为 csv,.mode csv 然后.output 文件名.csv,select from 表名,之后.output stdout 恢复默认输出。

导入 csv 文件,.import 文件名.csv 表名

备份整个数据库文件,也可以直接复制 db 文件,但是推荐使用.backup 备份文件路径,避免数据库正在写入的时候复制损坏。

Python 调用 sqlite3 常用使用方法

Python 标准库自带 sqlite3 模块,不需要额外安装,是最常用的代码调用方式。

第一步 导入模块 import sqlite3

第二步 连接数据库 conn sqlite3.connect test.db

第三步 创建游标 cur conn.cursor

第四步 执行 SQL cur.execute SQL 语句

第五步 如果是增删改,需要 conn.commit 提交事务,查询使用 cur.fetchall cur.fetchone 获取结果

第六步 操作完成关闭游标和连接 cur.close conn.close

重点提醒,sqlite3 参数查询推荐占位符问号写法,不要字符串拼接 SQL,防止 SQL 注入。

常用命令清单表格

命令作用
.tables列出全部数据表
.schema查看建表结构
.databases查看已连接数据库
.mode设置输出格式 表格 csv 列表
.headers on查询结果显示表头
.backup数据库备份
.import导入外部文件
.quit退出 sqlite3 交互

进阶常用操作

创建索引 create index idx_name on student name,索引可以提升查询速度,但是会增加插入更新的开销。

创建视图 create view v_student as select from student where score > 80

修改表 alter table,可以新增字段,但是 sqlite3 对 alter table 支持有限,不能直接修改字段类型或者删除字段,这种场景一般需要新建表迁移旧数据。

处理锁问题,sqlite3 写入是单写锁,如果多个程序同时写数据库,会报 database is locked,解决办法是缩短事务时间,写入完成立刻提交,或者开启 WAL 模式,WAL 模式可以提升读写并发,执行 pragma journal_mode WAL。

常见问题排查

数据库锁定,绝大多数是事务没有 commit 或者连接没有关闭,长时间占用写锁。

中文乱码,sqlite3 本身存储 utf8,一般是终端编码问题,确认终端编码为 utf8。

自增主键,integer primary key 会自动实现自增,不需要额外设置 auto_increment。

总结

sqlite3 常用使用方法分为命令行交互和代码编程调用,命令行适合调试 查看数据 备份导入导出,代码模块适合项目集成,核心掌握建表 增删改查 事务 WAL 模式,理解它单写锁的特性,本地轻量存储场景非常好用,遇到高并发写入就要评估是否更换其他数据库。

【常见问题】

问题 1 sqlite3 的常用使用方法里面为什么会出现 database is locked

回答 1 sqlite3 的常用使用方法里这个报错是写锁冲突,sqlite3 同一时间只允许一个写入事务,事务没有提交或者连接未关闭就会一直占用写锁,可以开启 WAL 模式或者缩短事务执行时间解决。

问题 2 sqlite3 的常用使用方法中 Python 需要单独安装吗

回答 2 sqlite3 的常用使用方法里 Python 内置 sqlite3 模块,标准库自带,不需要 pip 额外安装,直接 import sqlite3 就可以调用。

问题 3 sqlite3 的常用使用方法支持严格数据类型校验吗

回答 3 sqlite3 的常用使用方法里 sqlite3 是动态类型,定义字段类型只是亲和类型,不会强制严格校验,和 mysql 强类型数据库有明显区别。

问题 4 sqlite3 的常用使用方法可以直接复制 db 文件备份吗

回答 4 sqlite3 的常用使用方法里数据库空闲状态可以直接复制 db 文件备份,但是数据库正在写入的时候复制容易文件损坏,推荐使用 backup 命令做安全备份。

【免责申明】

本内容为 sqlite3 通用操作讲解,不同操作系统版本 sqlite3 命令行参数会有细微差别,SQL 语法以官方文档为准,内容仅用于学习参考,生产项目请结合业务场景评估数据库选型与性能风险。