作者选择了 自由和开源基金作为 写给捐款计划的一部分接受捐款。
介绍
SQLite是一个免费的跨平台数据库管理系统,因其效率和与许多不同的编程语言交互的能力而受欢迎。
在本教程中,你将安装SQLite在Ubuntu 20.04上,然后创建一个数据库,从中阅读数据,插入项目,删除项目,并从单独的表中连接项目。
<$>[note] 注: 本教程包含安装和使用SQLite的实用说明,它不涵盖更大的概念问题和生产问题,例如当人们应该或不应该考虑使用SQLite数据库时。
此外,许多语言都保持了与SQLite的集成。有关如何在Python代码中使用SQLite的说明,请参阅我们的教程, 如何在Python中使用‘sqlite3’模块 3。
前提条件
要完成本教程,您将需要:
- 运行 Ubuntu 20.04 的本地机器或服务器 要设置服务器,包括非 root sudo 用户和防火墙,您可以 创建运行 Ubuntu 20.04 的 DigitalOcean Droplet,然后按照我们的 初始服务器设置指南。
步骤 1 — 在 Ubuntu 20.04 上安装 SQLite
要在 Ubuntu 上安装 SQLite 命令行界面,请先更新您的包列表:
1sudo apt update
现在安装 SQLite:
1sudo apt install sqlite3
要验证安装,请检查软件的版本:
1sqlite3 --version
你会得到这样的输出:
1[secondary_label Output]
23.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837balt1
有了 SQLite 安装,您现在已经准备好创建一个新的数据库。
步骤 2 — 创建一个 SQLite 数据库
在此步骤中,您将创建一个数据库,其中包含不同的鲨鱼及其属性. 要创建数据库,请打开您的终端并运行此 sqlite3
命令:
1sqlite3 sharks.db
这将创建一个名为sharks
的新数据库. 如果文件sharks.db
已经存在,则 SQLite 将打开连接到它;如果它不存在,则 SQLite 将创建它。
你会得到这样的输出:
1[secondary_label Output]
2SQLite version 3.31.1 2020-01-27 19:55:54
3Enter ".help" for usage hints.
随后,您的提示将发生变化. 现在出现一个新的前缀,‘sqlite>’:
如果文件 sharks.db
已经不存在,如果您退出 sqlite
推广,而没有运行任何查询,则不会创建 sharks.db
文件. 为了确保文件被创建,您可以通过键入 ;
然后按下 'Enter' 来运行一个空查询。
有了 Shark 数据库的创建,您现在将创建一个新的表,并填充数据。
步骤 3 — 创建一个 SQLite 表
SQLite 数据库被组织成表. 表存储信息. 为了更好地可视化表,可以想象行和列。
本教程的其余部分将遵循 SQLite 命令的通用惯例。SQLite 命令是 uppercase,用户信息是 lowercase。
现在,让我们为各种数据创建一个表和一些列:
- ID
- 鲨鱼的名字
- 鲨鱼的类型
- 鲨鱼的平均长度(厘米)
使用以下命令创建表:
1CREATE TABLE sharks(id integer NOT NULL, name text NOT NULL, sharktype text NOT NULL, length integer NOT NULL);
使用NOT NULL
使该字段成为必需的。我们将在下一节中详细讨论NOT NULL
。
创建表后,将返回一个空的提示,现在让我们将一些值插入其中。
在表中插入值
在 SQLite 中,将值插入表中的命令遵循以下通用表格:
1INSERT INTO tablename VALUES(values go here);
在那里,表名
是您的表的名称,而值
则进入。
现在将值
的三个行插入你的鲨鱼
表:
1INSERT INTO sharks VALUES (1, "Sammy", "Greenland Shark", 427);
2INSERT INTO sharks VALUES (2, "Alyoshka", "Great White Shark", 600);
3INSERT INTO sharks VALUES (3, "Himari", "Megaladon", 1800);
由于您之前为表中的每个变量指定了NOT NULL
,因此您必须为每个变量输入一个值。
例如,尝试添加另一个鲨鱼而不设置其长度:
1INSERT INTO sharks VALUES (4, "Faiza", "Hammerhead Shark");
您将收到此错误:
1[secondary_label Output]
2Error: table sharks has 4 columns but 3 values were supplied
在此步骤中,您创建了一个表并将值插入其中,下一步将从您的数据库表中读取。
步骤 4 — 在 SQLite 中阅读表
在此步骤中,我们将专注于从表中读取数据的最基本的方法,请认识到SQLite为查看表中的数据提供了更具体的方法。
若要查看所有插入值的表格,请使用SELECT
:
1SELECT * FROM sharks;
您将看到之前插入的条目:
1[secondary_label Output]
21|Sammy|Greenland Shark|427
32|Alyoshka|Great White Shark|600
43|Himari|Megaladon|1800
要查看基于其id
的条目(我们手动设置的值),请将WHERE
命令添加到查询中:
1SELECT * FROM sharks WHERE id IS 1;
这将返回其id
等于1
的鲨鱼:
1[secondary_label Output]
21|Sammy|Greenland Shark|427
让我们仔细看看这个命令。
首先,我们从我们的数据库中选择
所有(*
)值,即鲨鱼
。
2 然后我们查看所有id
值。
3 然后我们返回所有id
等于1
的表格条目。
到目前为止,您已经创建了一个表,将数据插入其中,并查询了保存的数据,现在您将更新现有表。
步骤 5 — 更新 SQLite 中的表格
在下面的两个部分中,您首先将新列添加到现有表中,然后更新表中的现有值。
将列添加到 SQLite 表
SQLite 允许您使用ALTER TABLE
命令更改表,这意味着您可以创建新的行和列,或修改现有的行和列。
使用「ALTER TABLE」创建一个新的列. 这个新的列将追踪每个鲨鱼的年龄在年份:
1ALTER TABLE sharks ADD COLUMN age integer;
你现在有一个第五个列,年龄
。
更新 SQLite 表中的值
使用更新
命令,为每个鲨鱼添加新的年龄
值:
1UPDATE sharks SET age = 272 WHERE id=1;
2UPDATE sharks SET age = 70 WHERE id=2;
3UPDATE sharks SET age = 40 WHERE id=3;
1[secondary_label Output]
21|Sammy|Greenland Shark|427|272
32|Alyoshka|Great White Shark|600|70
43|Himari|Megaladon|1800|40
在此步骤中,您更改了表的组成,然后更新了表中的值. 在下一步,您将从表中删除信息。
步骤 6 — 在 SQLite 中删除信息
在此步骤中,您将根据参数的评估删除表中的条目。
在以下命令中,您正在查询您的数据库,并要求它删除您的鲨鱼
表中所有年龄小于200岁的鲨鱼:
1DELETE FROM sharks WHERE age <= 200;
输入SELECT * FROM sharks;
将验证Alyoshka
和Himari
,每个年龄都不到200岁,都被删除。
1[secondary_label Output]
21|Sammy|Greenland Shark|427|272
步骤 7 — 在 SQLite 中加入信息
想象一下,我们有两个表:我们目前的鲨鱼
表和濒危
表.现在如果濒危
表有一个id
值,该值与你的鲨鱼
表中的id
相符,并且它也有一个状态
值,表明每个鲨鱼的保护状态?
如果您想查询来自两个表的数据,您可以使用 SQLite 的四个连接命令之一:
INTER JOIN
OUTER JOIN
LEFT JOIN
CROSS JOIN
让我们创建第二个表,然后使用INTER JOIN
加入一些数据。
首先,创建你的濒危
表:
1CREATE TABLE endangered (id integer NOT NULL, status text NOT NULL);
2INSERT INTO endangered VALUES (1, "near threatened");
现在加入你的桌子:
1SELECT * FROM sharks INNER JOIN endangered on sharks.id = endangered.id;
你的输出将看起来像这样:
1[secondary_label Output]
21|Sammy|Greenland Shark|427|272|1|near threatened
请注意,输出还包括危险
中的id
值,您可以用更明确的命令指定所需的输出:
1SELECT sharks.id, sharks.name, sharks.sharktype, sharks.length, sharks.age, endangered.status FROM sharks INNER JOIN endangered on sharks.id = endangered.id;
此时,输出将排除第二个id
值:
1[secondary_label Output]
21|Sammy|Greenland Shark|427|272|near threatened
您现在已经成功连接了来自多个表的信息。
结论
SQLite 是一个有用的数据库管理工具,可以快速创建数据库并使用各种命令操纵它. 按照本教程,你现在对 SQLite 有了基本的理解,你准备深入到这个数据库管理系统中。
对于关系数据库系统的优良概述以及它们的比较,请参阅我们的文章, SQLite vs MySQL vs PostgreSQL: A Comparison Of Relational Database Management Systems。
此外,许多语言都保持了与SQLite的集成。 有关如何在Python代码中使用SQLite的说明,请参阅我们的教程, 如何在Python中使用‘sqlite3’模块 3。
对于 SQLite 语法的具体帮助, 官方文档是另一个很好的资源。