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 中使用
375KB
3.5K SLoC
Rust 的非官方 RethinkDB 驱动
文档齐全且易于使用
动机
官方驱动难以支持,使用不便,且缺乏文档或示例。因此,我尝试纠正这些不足
安装
$ 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