专业编程基础技术教程

网站首页 > 基础教程 正文

sqlite3 命令行工具

ccvgpt 2025-02-27 14:28:16 基础教程 1 ℃

sqlite3 工具

该sqlite3工具是一个基于终端的 SQLite 库前端,可以交互方式评估查询并以多种格式显示结果。它也可以用于脚本中。

在终端屏幕上,我们看到该工具的以下提示sqlite3:

sqlite3 命令行工具

$ sqlite3
SQLite 版本 3.16.2 2017-01-06 16:32:41
输入“.help”获取使用提示。
连接到临时内存数据库。
使用“.open FILENAME”在持久数据库上重新打开。

该.help命令是该工具的元命令之一sqlite3;它列出了所有元命令。.exit和.quit命令退出sqlite3会话。我们也可以使用Ctrl+D组合键退出sqlite3。 该.databases命令显示附加的数据库。 该.tables命令列出可用的表。

+清除屏幕,+清除当前行。(使用 readline 库构建时。Ctrl)LCtrlU

使用 sqlite3 创建数据库

完整的 SQLite 数据库存储在单个跨平台磁盘文件中。我们使用sqlite3命令行工具创建一个新的数据库文件。

$ sqlite3 测试.db

这里我们创建一个新的test.db数据库。如果文件存在,则打开它。

基本 sqlite3 元命令

接下来我们描述该工具的一些元命令sqlite3。

sqlite> .表
作者 汽车 朋友 预订
图书 客户 订单

该.tables命令显示可用的表。

sqlite> 从朋友中选择*;
1|简|F
2|托马斯|M
3|富兰克林|M
4|伊丽莎白|F
5|玛丽|F
6|露西|F
7|杰克|M

这里我们得到了一个语句的输出SELECT。默认情况下,输出模式为line,分隔符为|。

sqlite> .分隔符:
sqlite> 从朋友中选择*;
1:简:F
2:托马斯:M
3:富兰克林:M
4:伊丽莎白:F
5:玛丽:F
6:露西:F
7:杰克:M

这里我们使用了一个新的冒号分隔符。

还有几种其他的输出模式可供选择。以下示例显示了 column输出模式。

sqlite> .mode 列
sqlite> .headers 开启
sqlite> 从朋友中选择*;
身份证 姓名 性别       
---------- ---------- ----------
1 简·F         
2 托马斯·M         
3 富兰克林         
4 伊丽莎白F         
5 玛丽F         
6 露西F         
7 杰克·M

此示例显示了在 sqlite 的列模式下数据是如何格式化的。该.headers命令还用于显示列标题。默认情况下,标题是隐藏的。

该.width命令调整列的大小。(此元命令仅与列模式下的表相关。)

sqlite> 从作者自然连接书籍中选择姓名、标题;
姓名 职称     
----------- ----------
简·奥斯汀·艾玛      
列夫·托尔斯泰 战争与和平
约瑟夫地狱捕手 XII
查尔斯·迪克·戴维·科普
约瑟夫·赫尔 表现不错
列夫·托尔斯泰 安娜·卡伦

列宽不够,无法正确显示所有数据。

sqlite> .宽度 15 18
sqlite> 从作者自然连接书籍中选择姓名、标题;
姓名 职称             
--------------- ------------------
简·奥斯汀·艾玛              
列夫·托尔斯泰 战争与和平     
约瑟夫·海勒 第十二条军规         
查尔斯·狄更斯 大卫·科波菲尔
约瑟夫·海勒 好如金      
列夫·托尔斯泰 安娜·卡列尼娅

这里我们改变列宽。第一列为 15 个字符宽,第二列为 18 个字符宽。

sqlite> .shell清除

该.shell命令执行系统程序。在我们的例子中,我们用该命令清除屏幕clear。(Windows 上的等效命令是cls。)

sqlite> .显示
        回音:关闭
         设备:关闭
     解释:自动
     标题:开启
        模式:列
   空值:“”
      输出:stdout
折叠分隔符:“|”
行分隔符:“\n”
       状态:关闭
       宽度:15 18
    文件名:testdb

该.show命令列出了各种设置。其中包括输出模式、列表模式中使用的分隔符以及标题是否打开。

sqlite> .schema 汽车
创建表汽车(Id INTEGER PRIMARY KEY,名称TEXT,价格INTEGER);

该.schema命令显示了表的结构。它提供了创建表的 DDL SQL。

可以sqlite3使用.prompt命令来改变的提示。

sqlite> .prompt“>” “。”
> 选择 * 从汽车
. 限制2;
ID 名称 价格     
---------- ---------- ----------
1 奥迪 52642     
2 奔驰 57127     
>

有两个提示。一个是主提示,另一个是继续提示。默认的主提示是sqlite> ,默认的继续提示是...>。

从 shell 执行 SQL

我们可以从 shell 执行 SQL 命令。

$ sqlite3 test.db“从汽车中选择*;”
1|奥迪|52642
2|奔驰|57127
3|斯柯达|9000
4|沃尔沃|29000
5|宾利|350000
6|雪铁龙|21000
7|悍马|41400
8|大众|21600  

这里我们非交互地执行了一条SELECT语句;表中的所有汽车都Cars被选中了。

转储表

可以将 SQL 格式的表转储到磁盘。这样我们就可以轻松保存数据库表的结构和数据。

我们有汽车表。

sqlite> 从汽车中选择*;
ID 名称 价格     
---------- ---------- ----------
1 奥迪 52642     
2 奔驰 57127     
3、斯柯达9000      
4.沃尔沃29000     
5 宾利 350000    
6、雪铁龙21000     
7、悍马 41400     
8、大众 21600

我们将使用.dump命令来转储表。

sqlite> .dump 汽车
PRAGMA foreign_keys=OFF;
开始交易;
创建表汽车(Id INTEGER PRIMARY KEY,名称TEXT,价格INTEGER);
插入“汽车”值(1,'奥迪',52642);
插入“汽车”值(2,'Mercedes',57127);
插入“汽车”值(3,'斯柯达',9000);
插入“汽车”值(4,'沃尔沃',29000);
插入“汽车”值(5,'宾利',350000);
插入“汽车”值(6,'雪铁龙',21000);
插入“汽车”值(7,'悍马',41400);
插入“汽车”值(8,'大众',21600);
犯罪;

该.dump命令向我们展示了创建表所需的 SQL Cars。

sqlite> .输出 cars2.sql
sqlite> .dump 汽车

我们还可以将输出重定向到文件。该.output 命令将把输出重定向到cars2.sql文件。

$ cat cars2.sql
PRAGMA foreign_keys=OFF;
开始交易;
创建表汽车(Id INTEGER PRIMARY KEY,名称TEXT,价格INTEGER);
插入“汽车”值(1,'奥迪',52642);
...

cars2.sql我们用命令显示文件的内容cat 。

读取 SQL

我们可以用命令从文件名中读取SQL语句.read。

sqlite> .表
作者 汽车 朋友 预订
图书 客户 订单  
sqlite> 删除表汽车;
sqlite> .表
作者 客户 订单      
图书 朋友 预订
sqlite> .读取汽车.sql
sqlite> .表
作者 汽车 朋友 预订
图书 客户 订单     
sqlite> 从汽车中选择*其中 Id=1;
ID 名称 价格     
---------- ---------- ----------
1 奥迪 52642   

这里我们执行了一系列命令。我们删除表并从中读取它cars.sql。

.sqlite_history 文件

命令和语句存档在.sqlite_history文件中。该文件位于主目录中。

$ tail -5 ~/.sqlite_history
.表格
从汽车中选择*;
.mode 列
.headers 开启
。展示

使用该tail命令,我们显示最后五个条目。

资源文件

该sqlite3工具有一个名为的资源文件.sqliterc。它位于主目录中。如果没有这样的文件,我们可以简单地创建它。资源文件可以包含元命令或常规 SQL 语句。但是,我们应避免在文件中使用 SQL。

$ cat.sqliterc
.mode 列
.headers 开启
.空值 NULL  

这是一个资源文件的简单示例。它有三个元命令。有了资源文件,我们在启动工具时就不必再重新执行元命令了sqlite3。它们将在工具启动时自动执行。

$ sqlite3 测试.db
-- 从 /home/janbodnar/.sqliterc 加载资源
SQLite 版本 3.16.2 2017-01-06 16:32:41
输入“.help”获取使用提示。

我们收到一条消息,提示该工具在开始时就加载了资源。

命令行选项

该工具有多个命令行选项。它们大多重复元命令。请注意,命令行选项会覆盖资源文件元命令。

$ sqlite3--帮助
-- 从 /home/janbodnar/.sqliterc 加载资源
用法:sqlite3 [选项] 文件名 [SQL]
FILENAME 是 SQLite 数据库的名称。将创建一个新数据库
如果该文件先前不存在。
选项包括:
   -ascii 将输出模式设置为‘ascii’
   -bail 发生错误后停止
   -batch 强制批量 I/O
   -column 将输出模式设置为“column”
   -cmd COMMAND 在读取标准输入之前运行“COMMAND”
   -csv 将输出模式设置为“csv”
   -echo 执行前打印命令
   -init FILENAME 读取/处理命名文件
   -[no]header 打开或关闭标题
   -help 显示此消息
   -html 将输出模式设置为 HTML
   -interactive 强制交互 I/O
   -line 将输出模式设置为‘line’
   -list 将输出模式设置为‘list’
   -lookaside SIZE N 使用 N 个 SZ 字节作为后备内存
   -mmap N 默认 mmap 大小设置为 N
   -newline SEP 设置输出行分隔符。默认值:'\n'
   -nullvalue TEXT 设置 NULL 值的文本字符串。默认为 ''
   -pagecache SIZE N 使用 N 个 SZ 字节槽作为页缓存内存。
   -scratch SIZE N 使用 N 个 SZ 字节槽作为临时内存
   -separator SEP 设置输出列分隔符。默认值:'|'
   -stats 在每次完成之前打印内存统计信息
   -version显示 SQLite 版本
   -vfs NAME 使用 NAME 作为默认 VFS

该--help选项为我们提供了所有可用选项的列表及其简短说明。

$ sqlite3 -echo -line -n?oheader 测试.db
-- 从 /home/janbodnar/.sqliterc 加载资源
SQLite 版本 3.16.2 2017-01-06 16:32:41
输入“.help”获取使用提示。
sqlite> 选择 * 从汽车限制 2;
从汽车中选择*限制2;
   ID = 1
 名称 = Audi
价格 = 52642

   ID = 2
 名称 = Mercedes
价格 = 57127

我们使用 、 和 选项启动该工具 。sqlite3启动后 ,语句会重复/回显。输出处于行模式,并且没有显示标题。-echo-line-noheaderSELECT

$ sqlite3-版本
-- 从 /home/janbodnar/.sqliterc 加载资源
3.16.2 2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209

通过该-version选项我们可以获得 sqlite3 的版本。

$ sqlite3-html 测试.db
-- 从 /home/janbodnar/.sqliterc 加载资源
SQLite 版本 3.16.2 2017-01-06 16:32:41
输入“.help”获取使用提示。
sqlite> 选择 * 从汽车限制 2;
身份证
姓名
价格

1
奥迪
52642

2
梅赛德斯
57127

通过该-html选项,我们可以将结果输出为简单的 HTML 表。

在 SQLite 教程的这一部分中,我们使用了sqlite3命令行工具。我们描述了各种元命令,展示了如何转储表以及如何从文件中读取 SQL。我们提到了 sqlite 的历史记录和资源文件。

Tags:

最近发表
标签列表