#rethink-db #database-driver #driver #async #reql

unreql

文档齐全且易于使用的 RethinkDB Rust 驱动

6 个版本

0.1.8 2024年4月27日
0.1.7 2024年4月6日
0.1.6 2024年3月20日
0.1.3 2024年1月21日

2009数据库接口


unreql_deadpool 中使用

MIT 许可

375KB
3.5K SLoC

Rust 的非官方 RethinkDB 驱动

文档齐全且易于使用

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?;

依赖项

~15–27MB
~502K SLoC