2 个版本
0.1.1 | 2024 年 3 月 9 日 |
---|---|
0.1.0 | 2024 年 1 月 21 日 |
#6 in #rethink-db
56 个月下载
用于 2 个 crate(通过 unreql)
17KB
485 代码行
非官方 RethinkDB 驱动程序 for Rust
文档齐全且易于使用
动机
官方驱动程序难以支持,使用不便,且几乎没有文档或示例。因此,我尝试弥补这些不足
安装
$ 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