2 个版本

0.1.1 2024 年 3 月 9 日
0.1.0 2024 年 1 月 21 日

#6 in #rethink-db

Download history 27/week @ 2024-04-03 1/week @ 2024-04-10 45/week @ 2024-04-17 3/week @ 2024-04-24 1/week @ 2024-05-22 6/week @ 2024-05-29 4/week @ 2024-06-05

56 个月下载
用于 2 个 crate(通过 unreql

MIT 许可证

17KB
485 代码行

非官方 RethinkDB 驱动程序 for Rust

文档齐全且易于使用

github crates.io docs.rs

动机

官方驱动程序难以支持,使用不便,且几乎没有文档或示例。因此,我尝试弥补这些不足

安装

$ cargo add unreql

[dependencies]
unreql = "0.1.8"

导入

use unreql::r;

连接

let conn = r.connect(()).await?;

获取数据

按 ID 获取

let user: User = r.table("users").get(1).exec(&conn).await?;

获取所有数据

let users: Vec<User> = r.table("users").exec_to_vec(&conn).await?;

let mut cur = r.table("users").run(&conn);
let mut users: Vec<User> = vec![];
while let Ok(Some(user)) = cur.try_next().await? {
    users.push(user);
}

更新数据

使用嵌套 reql 查询

r.table("users")
  .get(1)
  .update(rjson!({
    "name": "John",
    "upd_count": r.row().g("upd_count").add(1),
  }))
  .run(&conn);

使用连接池

实现了异步 deadpool 的会话管理器

use unreql::{r, cmd::connect};
use unreql_deadpool::{IntoPoolWrapper, SessionManager};
use deadpool::managed::Pool;

// config to connect to rethinkdb
let config = connect::Options::default();
// new session manager
let manager = SessionManager::new(config);
// create a pool that is wrapped for ease of use (to be able to be passed to `.run(&pool)`)
let pool = Pool::builder(manager).max_size(20).build().unwrap().wrapper();

// now you can to pass `pool` to `.run()` and `.exec()`
let user: User = r.table("users").get(1).exec(&pool).await?;

依赖

~2MB
~44K SLoC