7个版本
0.1.6 | 2020年8月7日 |
---|---|
0.1.5 | 2020年8月5日 |
#1793 在 数据库接口
每月 45 次下载
5KB
🎯 Hesoyam ORM
这只是Postgres和Clickhouse的另一个ORM。如果你觉得它有用,请给我们一个⭐ :)
安装
Cargo.toml
:
[dependencies]
hesoyam = "0.1.6"
示例
首先让我们自定义模型。如果我们不传递表名作为宏参数,将生成默认值。假设表已经在数据库中创建。
model.rs
看起来像
#[model(dialect = "postgres", table_name = "users")]
pub struct User {
pub name: String,
pub age: i32,
pub weight: f32,
}
现在我们应该提供数据库配置来开始工作
let pg_conf = PostgresConfig::new().
host("loclahost").
user("postgres").
password("qwerty").
port(5432).
database("postgres");
let ch_conf = ClickhouseConfig::new().
schema("http").
hostname("localhost").
port(8123);
let mut cm = ClientManager::new().
add_client(&pg_conf)?.
add_client(&ch_conf)?;
插入一条和多条记录
use hesoyam::prelude::*
// insert one entry
let name = String::from("Thomas");
let age = 20;
User::save(name, age).exec(&mut cm)?;
// do the same with multiple users
let users = vec![
User { name: "John".to_owned(), age: 20 },
User { name: "Tom".to_owned(), age: 30 },
User { name: "Guido".to_owned(), age: 99 },
User { name: "Rob".to_owned(), age: 199 },
User { name: "Michael".to_owned(), age: 25 },
User { name: "Jordan".to_owned(), age: 25 },
User { name: "Raphael".to_owned(), age: 25 },
];
users.save().exec(&mut cm)?;
选择记录
请注意,From
trait 由 #[model]
宏实现
let res = User::select().filter(vec![
User::field_age.gte(&20),
User::field_age.lte(&40),
]).exec(&mut cm)?;
for r in res {
let u: User = r.into();
println!("{:#?}", u);
}
原始查询
此外,还有 #[query_result]
宏来简化将原始查询结果转换为结构体的过程
let raw_query = r#"
select
entity_id,
max(high) as max_high
from market_quote
group by entity_id
order by entity_id;
"#;
#[query_result]
#[derive(Debug)]
struct Result {
entity_id: i32,
avg_high: f32,
}
let res = cm.
get_client("clickhouse")?.
query(raw_query)?;
for row in res {
let res: Result = row.into();
println!("{:#?}", res);
}
有关更多(更新/删除)信息,请参阅 示例 🙂
依赖项
~16–27MB
~418K SLoC