SQL必知必会40-SQLite:为什么微信用SQLite存储聊天记录?

我在上一篇文章中讲了 WebSQL,当我们在 Chrome、Safari 和 Firefox 等浏览器客户端中使用 WebSQL 时,会直接操作 SQLite。实际上 SQLite 本身是一个嵌入式的开源数据库引擎,大小只有 3M 左右,可以将整个 SQLite 嵌入到应用中,而不用采用传统的客户端/服务器(Client/Server)的架构。这样做的好处就是非常轻便,在许多智能设备和应用中都可以使用 SQLite,比如微信就采用了 SQLite 作为本地聊天记录的存储。

今天我们就来深入了解一下 SQLite,今天的内容主要包括以下几方面:

  1. SQLite 是什么?它有哪些优点和不足?
  2. 如何在 Python 中使用 SQLite?
  3. 如何编写 SQL,通过 SQLite 查找微信的聊天记录?

SQLite 是什么

SQLite 是在 2000 年发布的,到目前为止已经有 19 年了。一直采用 C 语言编写,采用 C 语言而非 C++ 面向对象的方式,可以提升代码底层的执行效率。但 SQLite 也有一些优势与不足。

它的优势在于非常轻量级,存储数据非常高效,查询和操作数据简单方便。此外 SQLite 不需要安装和配置,有很好的迁移性,能够嵌入到很多应用程序中,与托管在服务器上的 RDBMS 相比,约束少易操作,可以有效减少服务器的压力。

不足在于 SQLite 常用于小到中型的数据存储,不适用高并发的情况。比如在微信本地可以使用 SQLite,即使是几百 M 的数据文件,使用 SQLite 也可以很方便地查找数据和管理,但是微信本身的服务器就不能使用 SQLite 了,因为 SQLite 同一时间只允许一个写操作,吞吐量非常有限。

作为简化版的数据库,SQLite 没有用户管理功能,在语法上也有一些自己的“方言”。比如在 SQL 中的 SELECT 语句,SQLite 可以使用一个特殊的操作符来拼接两个列。在 MySQL 中会使用函数 concat,而在 SQLite、PostgreSQL、Oracle 和 Db2 中使用||号,比如:SELECT MesLocalID || Message FROM "Chat_1234"

这个语句代表的是从 Chat_1234 数据表中查询 MesLocalID 和 Message 字段并且将他们拼接起来。

但是在 SQLite 中不支持 RIGHT JOIN,因此你需要将右外连接转换为左外连接,也就是 LEFT JOIN,写成下面这样:

 

SELECT * FROM team LEFT JOIN player ON player.team_id = team.team_id

复制代码

除此以外 SQLite 仅支持只读视图,也就是说,我们只能创建和读取视图,不能对它们的内容进行修改。

总的来说支持 SQL 标准的 RDBMS 语法都相似,只是不同的 DBMS 会有一些属于自己的“方言”,我们使用不同的 DBMS 的时候,需要注意。

在 Python 中使用 SQLite

我之前介绍过如何在 Python 中使用 MySQL,其中会使用到 DB API 规范(如下图所示࿰

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员zhi路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值