如何创建 sqlite3 内存数据库?

Posted

技术标签:

【中文标题】如何创建 sqlite3 内存数据库?【英文标题】:How do I create a sqllite3 in-memory database? 【发布时间】:2010-09-23 04:40:12 【问题描述】:

sqlite3 的appropriate uses 之一是“内存数据库”。对于我的 C++ 应用程序来说,这听起来像是一个非常有用的工具。有没有人有一个例子说明这是如何在 C 或 C++ 中完成的?我正在寻找一种规范的方法来将几个平面文件放入内存数据库中,然后进行一些连接。

【问题讨论】:

【参考方案1】:

只需打开文件 :memory: 就可以了(至少在 php 中是这样)。

您提到您想读取几个平面文件并对其进行连接。如果可以将平面文件存储为 SQLite 数据库,则可以通过将一个附加到另一个来直接使用两者:

ATTACH foo.db AS foo

然后像这样引用 foo 中的表:

SELECT * FROM foo.users

通过这种方式,您无需创建内存数据库即可进行连接。

【讨论】:

【参考方案2】:

其实很简单。使用 C/C++ API 打开数据库时,只需指定 ':memory:' 作为数据库文件名。这是引擎将识别的特殊常数。这实际上适用于其他语言,例如 Python 或 Ruby,因为它们通常只是包装 C/C++ API。详情请参阅http://sqlite.org/c3ref/open.html

【讨论】:

【参考方案3】:

如果您希望 SQLite 不使用临时文件作为日志,例如,除了手动请求连接、断开连接、附加或分离时,您不希望任何文件活动。然后在连接到 ":memory:" 数据库后在运行时使用以下两个 pragma。

PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;

来自docs.

【讨论】:

以上是关于如何创建 sqlite3 内存数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用命令行工具 sqlite3 浏览内存中的 SQLite 数据库

SQLite 如何变成 内存数据库

sqlite3 是不是在使用之前将整个数据库读入内存?

SQLite——临时文件 & 内存数据库(待续)

SQLite——临时文件 & 内存数据库(待续)

python内置的sqlite3模块,使用其内置数据库