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 • Rust 包仓库 1638/week @ 2024-05-04 • Rust 包仓库 1464/week @ 2024-05-11 • Rust 包仓库 1479/week @ 2024-05-18 • Rust 包仓库 1124/week @ 2024-05-25 • Rust 包仓库 1292/week @ 2024-06-01 • Rust 包仓库 1578/week @ 2024-06-08 • Rust 包仓库 2006/week @ 2024-06-15 • Rust 包仓库 1658/week @ 2024-06-22 • Rust 包仓库 1616/week @ 2024-06-29 • Rust 包仓库 1109/week @ 2024-07-06 • Rust 包仓库 793/week @ 2024-07-13 • Rust 包仓库 2188/week @ 2024-07-20 • Rust 包仓库 2932/week @ 2024-07-27 • Rust 包仓库 1872/week @ 2024-08-03 • Rust 包仓库 1918/week @ 2024-08-10 • Rust 包仓库 1971/week @ 2024-08-17 • Rust 包仓库

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 ('alice@example.org')", ()).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 ('alice@example.org')", ()).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