24个版本 (4个重大更改)

0.5.0 2024年8月7日
0.5.0-alpha.22024年7月11日
0.5.0-alpha.12024年6月20日
0.3.2 2024年3月26日
0.1.0 2022年11月26日

49数据库接口

Download history 1638/week @ 2024-05-04 1464/week @ 2024-05-11 1479/week @ 2024-05-18 1124/week @ 2024-05-25 1292/week @ 2024-06-01 1578/week @ 2024-06-08 2006/week @ 2024-06-15 1658/week @ 2024-06-22 1616/week @ 2024-06-29 1109/week @ 2024-07-06 793/week @ 2024-07-13 2188/week @ 2024-07-20 2932/week @ 2024-07-27 1872/week @ 2024-08-03 1918/week @ 2024-08-10 1971/week @ 2024-08-17

9,037 每月下载量
17 个Crate 中使用 (15 个直接使用)

MIT 许可证

405KB
10K SLoC

libSQL API for Rust

Crates.io MIT licensed

此仓库包含libSQL API for Rust。

开发

有关更多信息,请参阅DEVELOPING.md

许可证

本项目采用MIT许可证

贡献

除非您明确声明,否则您提交给libSQL的任何有意贡献都应按MIT许可,不附加任何额外条款或条件。


lib.rs:

libSQL API for Rust

libSQL是一个基于SQLite的可嵌入SQL数据库引擎。此Rust API是对SQLite C API的电池式包装,以支持透明复制,同时保持与SQLite生态系统(如SQL方言和扩展)的兼容性。如果您正在用Rust构建应用程序,这是您应该使用的crate。此Rust crate还有libSQL语言绑定,用于其他语言,如JavaScript、Python、Go和C。

入门

要开始,您首先需要创建一个Database对象,然后打开一个Connection到它,您可以使用它来查询

use libsql::Builder;

let db = Builder::new_local(":memory:").build().await.unwrap();
let conn = db.connect().unwrap();
conn.execute("CREATE TABLE IF NOT EXISTS users (email TEXT)", ()).await.unwrap();
conn.execute("INSERT INTO users (email) VALUES ('[email protected]')", ()).await.unwrap();

嵌入式副本

嵌入式副本是运行在您的应用程序进程中的libSQL数据库,它保留远程数据库的本地副本。如果您想要将数据移动到应用程序的内存空间以实现快速访问,它们非常有用。

您可以使用构造函数 Database::open_with_local_sync 打开一个只读的嵌入式副本。

use libsql::Builder;
use libsql::replication::Frames;

let mut db = Builder::new_local_replica("/tmp/test.db").build().await.unwrap();

let frames = Frames::Vec(vec![]);
db.sync_frames(frames).await.unwrap();
let conn = db.connect().unwrap();
conn.execute("SELECT * FROM users", ()).await.unwrap();

远程数据库

您还可以创建一个libsql连接,该连接不打开本地数据库,而是向远程数据库发送查询。

use libsql::Builder;

let db = Builder::new_remote("libsql://my-remote-db.com".to_string(), "my-auth-token".to_string()).build().await.unwrap();
let conn = db.connect().unwrap();
conn.execute("CREATE TABLE IF NOT EXISTS users (email TEXT)", ()).await.unwrap();
conn.execute("INSERT INTO users (email) VALUES ('[email protected]')", ()).await.unwrap();

WASM

由于WASM需要 !Send 支持以及 Database 类型支持异步操作并使用 async_trait 来抽象不同数据库类型,我们无法通过 Database 类型支持WASM。相反,我们在 wasm 模块中提供了更简单的并行类型,这些类型可以提供对WASM中我们的远程HTTP协议的访问。

示例

您可以在 examples 目录中找到更多示例。

功能标志

这个crate提供了一些功能标志,可以帮助您通过减少编译特定功能所需的依赖来提高编译时间。例如,如果您只想进行HTTP请求,则可能不需要编译libsql C代码。功能标志可以通过以下方式包含libsql crate:

libsql = { version = "*", default-features = false, features = ["core", "replication", "remote" ]

默认情况下,所有功能都是启用的,但通过提供 default-features = false 将移除这些默认设置。

功能描述如下

  • core 这包括支持基本本地数据库使用和嵌入式副本功能的核心C代码。
  • replication 此功能标志包括 core 功能标志,并添加了HTTP代码,允许您将远程数据库同步到本地。
  • remote 此功能标志仅包括HTTP代码,允许您针对远程数据库运行查询。

依赖

~0.6–18MB
~254K SLoC