9 个版本 (5 个破坏性更改)
0.6.0 | 2021 年 5 月 22 日 |
---|---|
0.5.1 | 2020 年 6 月 22 日 |
0.4.0 | 2020 年 4 月 12 日 |
0.3.1 | 2020 年 4 月 8 日 |
0.1.0 | 2019 年 8 月 1 日 |
#2432 在 数据库接口
每月 42 次下载
在 testcontainers-avk 中使用
160KB
5K SLoC
orientdb-rs
OrientDB 客户端
OrientDB 的 Rust 客户端。支持同步和异步(tokio 和 async-std)
安装
从 crates.io 安装
[dependencies]
orientdb-client = "*"
Cargo 功能
async-std-runtime
: 使用async-std
的异步 API。tokio-runtime
: 使用tokio
的异步 API。uuid
: 添加对 UUID 的支持。sugar
: 添加用于查询并将结果绑定到结构体的便捷 API
示例
基本使用(同步)
use orientdb_client::{OrientDB};
fn main() -> Result<(), Box<std::error::Error>> {
let client = OrientDB::connect(("localhost",2424))?;
let session = client.session("demodb","admin","admin")?;
let results : Vec<_> = session.query("select from V where id = :param").named(&[("param", &1)]).run()?.collect();
println!("{:?}", results);
Ok(())
}
基本使用(异步)
对于 async-std
激活功能 async-std-runtime
orientdb-client= {version= "*",features= ["async-std-runtime"] }
use async_std::task::block_on;
use futures::StreamExt;
use orientdb_client::aio::OrientDB;
use orientdb_client::OrientResult;
fn main() -> OrientResult<()> {
block_on(async {
let client = OrientDB::connect(("localhost", 2424)).await?;
let session = client.session("demodb", "admin", "admin").await?;
let mut stream = session.query("select from V limit 10").run().await?;
while let Some(item) = stream.next().await {
println!("Record {:?}", item?);
}
Ok(())
})
}
对于 tokio
激活功能 tokio-runtime
orientdb-client= {version= "*",features= ["tokio-runtime"] }
use futures::StreamExt;
use orientdb_client::aio::OrientDB;
use orientdb_client::OrientResult;
#[tokio::main]
async fn main() -> OrientResult<()> {
let client = OrientDB::connect(("localhost", 2424)).await?;
let session = client.session("demodb", "admin", "admin").await?;
let mut stream = session.query("select from V limit 10").run().await?;
while let Some(item) = stream.next().await {
println!("Record {:?}", item?);
}
Ok(())
}
其他功能
sugar
功能
sugar
功能为查询构建器添加了 3 个方法以启动查询。
fetch_one
fetch
stream
用于异步或iter
用于同步
当您想执行查询并将 OResult
映射到结构体时,应使用这些方法而不是 run
API。
sugar
在同步和异步模式下都受支持。
fetch_one
消费流并获取第一个结果(如果有的话)。
use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
name: String,
}
// fetch one
let user: Option<User> = session
.query("select from OUser limit 1")
.fetch_one()
.await?;
println!("User {:?}", user);`
fetch
将流收集到 Vec
并将其映射到结构体。
use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
name: String,
}
// fetch
let user: Vec<User> = session
.query("select from OUser limit 1")
.fetch()
.await?;
println!("Users {:?}", user);`
stream
将流中的每个项目映射到结构体。
use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
name: String,
}
// fetch stream and collect
let stream = session
.query("select from OUser")
.stream::<User>()
.await?
.collect::<Vec<_>>()
.await;
println!("Users {:?}", user);
开发
编译
git clone https://github.com/wolf4ood/orientdb-rs.git
cd orientdb-rs
cargo build
运行测试
您可以使用 docker-compose 启动一个用于测试的实例。使用环境变量 ORIENTDB_SERVER
指定 OrientDB 的版本
cd docker-compose
export ORIENTDB_SERVER=3.0.23
docker-compose up -d
cd ..
cargo test
依赖关系
~4–16MB
~206K SLoC