如何和何时使用Sqlite

Sqlite是一个非常简单和快速的开源SQL引擎。本教程将解释什么时候最好使用Sqlite,而不是完整的RDBMS如Mysql或Postgres,以及如何安装它和基本的使用示例涵盖CRUD - Cre

Sqlite是一个非常简单和快速的开源SQL引擎。 本教程将解释什么时候最好使用Sqlite,而不是完整的RDBMS如Mysql或Postgres,以及如何安装它和包括CRUD - 创建,读取,更新和删除的基本用法示例。

误解


不要被欺骗,认为Sqlite只用于测试和开发。 例如,它适用于每天接收多达10万次点击的网站 - 这是一个保守的限制。 Sqlite数据库的最大大小是140太字节(这应该足够了,对吗?),并且它可以比完整的RDBMS快得多。 完整的数据库和所有其他必要的数据存储在主机文件系统中的正常文件中,因此不需要单独的服务器进程(切割出所有需要缓慢的进程间通信)。

在您的VPS的最佳使用


Sqlite专注于简单。 因为它是完全内部的,它通常明显快于替代品。 如果你正在寻找可移植性(关于语言和平台),简单性,速度和小的内存占用--Sqlite是理想的。 其缺点仅在需要高读取或写入并发性时才显而易见:Sqlite一次只能支持一个写入程序,并且如果需要许多客户端同时访问Sqlite数据库,则常常高的文件系统延迟可能不方便。 最后可能的缺点是,它的语法,尽管与其他SQL系统相似,是唯一的。 虽然移动到另一个系统是相当微不足道的,如果你做“超越”Sqlite,在过渡中会有一些开销。

欲了解更多信息,,有上的SQLite的利弊一些很好的轮廓在这里

在您的VPS上安装Sqlite


sqlite3模块是标准Python库的一部分,因此在标准的Ubuntu安装或任何安装了Python的系统中,不需要进一步的安装。 要在Ubuntu上安装Sqlite命令行界面,请使用以下命令:

sudo apt-get update
sudo apt-get install sqlite3 libsqlite3-dev


如果你需要从源代码编译它,然后抓住从最新版本的autoconf sqlite.org/download.html 在写作时:

wget http://sqlite.org/2013/sqlite-autoconf-3080100.tar.gz
tar xvfz sqlite-autoconf-3080100.tar.gz
cd sqlite-autoconf-3080100
./configure
make
make install



(从源代码编译注释:1)不要在标准的Ubuntu安装中执行此操作,因为您可能会由于已安装的版本和新安装的版本之间的冲突而导致“标头和源版本不匹配”错误。 2)如果make命令似乎期待着更多的投入,只需耐心等待,因为源可能需要一段时间来编译)。

基本命令行界面用法


要创建数据库,请运行以下命令:

sqlite3 database.db

其中'database'是您的数据库的名称。 如果该文件database.db已经存在时,SQLite将打开到它的连接; 如果它不存在,它将被创建。 您应该看到类似的输出:

SQLite version 3.8.1 2013-10-17 12:57:35
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>


现在让我们创建一个表并插入一些数据。 这个名为“葡萄酒”的表有四列:一个ID,葡萄酒的生产者,葡萄酒的种类和葡萄酒的来源国。 因为它不是星期五,我们将只插入三个葡萄酒到我们的数据库:

CREATE TABLE wines (id integer, producer varchar(30), kind varchar(20), country varchar(20)); 
INSERT INTO WINES VALUES (1, "Rooiberg", "Pinotage", "South Africa");
INSERT INTO WINES VALUES (2, "KWV", "Shiraz", "South Africa");
INSERT INTO WINES VALUES (3, "Marks & Spencer", "Pinot Noir", "France");


我们创建了数据库,一个表和一些条目。 现在按Ctrl + D ,以退出SQLite和键入以下(再次'数据库'替换你的数据库的名字),这将重新连接到我们刚刚创建的数据库:

sqlite3 database.db



现在键入:

SELECT * FROM wines;

你应该看到我们刚刚做的条目:

1|Rooiberg|Pinotage|South Africa
2|KWV|Shiraz|South Africa
3|Marks & Spencer|Pinot Noir|France

大。 这是创造和阅读。 让我们做一个更新和删除:

UPDATE wines SET country="South Africa" WHERE country="France";

这将更新数据库,因此所有列为来自法国的葡萄酒将被列为来自南非。 检查结果:

SELECT * FROM wines;

你应该看到:

1|Rooiberg|Pinotage|South Africa
2|KWV|Shiraz|South Africa
3|Marks & Spencer|Pinot Noir|South Africa

现在我们所有的葡萄酒来自南非。 让我们庆祝KWV喝酒,并从我们的数据库中删除:

DELETE FROM wines WHERE id=2;
SELECT * FROM wines;

我们应该看到在我们的地窖里列出的少一些葡萄酒:

1|Rooiberg|Pinotage|South Africa
3|Marks & Spencer|Pinot Noir|South Africa


这涵盖了所有的基本数据库操作。 在我们完成之前,让我们尝试一个(略)少一点的例子,它使用两个表和一个基本连接。

用命令从sqlite的退出Ctrl + D并重新连接到一个新的数据库sqlite3 database2.db

我们将创建一个非常相似wines表,也是一个countries表,它存储了国家的名称和它的现任总统。 让我们首先创建countries表,然后在里面插入South Africa和France(注意,你可以同时复制粘贴几行sqlite代码):

CREATE TABLE countries (id integer, name varchar(30), president varchar(30));
INSERT INTO countries VALUES (1, "South Africa", "Jacob Zuma");
INSERT INTO countries VALUES(2, "France", "Francois Hollande");


然后我们可以重新创建我们的葡萄酒表:

CREATE TABLE wines (id integer, kind varchar(30), country_id integer);
INSERT INTO wines VALUES (1, "Pinotage", 1);
INSERT INTO wines VALUES (2, "Shiraz", 1);
INSERT INTO wines VALUES (3, "Pinot Noir", 2);


现在让我们看看南非有什么葡萄酒:

SELECT kind FROM wines JOIN countries ON country_id=countries.id WHERE countries.name="South Africa";



你应该看到:

Pinotage
Shiraz



这包括基本的加入。 注意,Sqlite为你做了很多。 在上面的连接语句,则默认为INNER JOIN ,虽然我们只使用关键字JOIN 此外,我们不必指定wines.country_id因为它是毫不含糊的。 另一方面,如果我们尝试命令:

SELECT kind FROM wines JOIN countries ON country_id=id WHERE country_id=1;



我们会得到错误信息Error: ambiguous column name: id 这是很公平既是我们的表中有一个id列。 但一般Sqlite是相当宽恕。 它的错误消息往往使得定位和修复任何问题相当微不足道,这有助于加快开发过程。 对于进一步的语法帮助,官方文档是充满像这样的图表sqlite.org/lang delete.html ,它可以是有益的,但如果你喜欢具体的例子,这里是一个链接到一个教程,大部分很好的概述联接类型:<a href=" http://zetcode.com/db/sqlite/joins/“target="blank"> zetcode.com/db/sqlite/joins/。

最后,Sqlite具有所有主要语言的包装器和驱动程序,并且可以在大多数系统上运行。 其中许多人的名单,可以发现在这里 祝好运并玩得开心点。