38 个版本 (20 个稳定版)

4.0.1 2024年3月18日
4.0.0-rc.22023年11月25日
3.3.0 2023年5月28日
3.2.0 2023年3月17日
0.4.0 2020年6月10日

#57 in 数据库接口


用于 2 crates

MIT 许可证

290KB
7.5K SLoC

Elephantry

Crates.io docs.rs Github actions pipeline status

Rust 遇到 PostgreSQL。

入门

查看 快速入门示例

快速概览

Elephantry 是一个专门针对 PostgreSQL 设计的 OMM(对象模型管理器),用于处理从简单到复杂的查询。

let database_url = std::env::var("DATABASE_URL")
    .unwrap_or_else(|_| "postgres://127.0.0.1".to_string());

// Connect
let elephantry = elephantry::Pool::new(&database_url)?;

// Simple query
let rows = elephantry.execute("select id from entity")?;

for row in &rows {
    let id: i32 = row.get("id");
    println!("{id}");
}

// Define entity
#[derive(elephantry::Entity)]
#[elephantry(model = "Model", structure = "Structure")]
struct Entity {
    #[elephantry(pk)]
    id: u16,
    deleted: bool,
}

// Read entities
let entity = elephantry.find_by_pk::<Model>(&elephantry::pk!(id))?;
let entities = elephantry.find_all::<Model>(None)?;
let entities = elephantry.find_where::<Model>("deleted = $1", &[&false], None)?;

// Write entities
elephantry.insert_one::<Model>(&entity)?;
elephantry.update_one::<Model>(&elephantry::pk!{id => entity.id}, &entity)?;
elephantry.delete_one::<Model>(&entity)?;
elephantry.delete_where::<Model>("deleted = $1", &[&true])?;

特性

  • all-types — 启用所有类型特性(见下文);
  • arbitrary — 添加对 arbitrary crate 的支持;
  • config — 添加对 config 分层配置系统的支持;
  • inspect — 包含 inspect 模块以检查数据库结构;
  • pg14 — 启用 PostgreSQL 14 特性(多范围和新的 TargetSessionAttrs);
  • r2d2 — 添加对 r2d2 通用连接池的支持;
  • rocket — 添加对 rocket 网络框架的支持;
  • serde — 添加通过 serde 进行序列化和反序列化的支持。

类型

  • bit — 添加对 bit 类型的支持;
  • date — 添加对 date 类型的支持;
  • geo — 添加对 geometric 类型的支持;
  • json — 添加对 json 类型的支持;
  • ltree — 添加对 ltree 类型的支持;
  • multirange — 添加对 multirange 类型的支持(PostgreSQL >= 14);
  • money — 添加对 money 类型的支持;
  • net — 添加对 network 类型的支持;
  • numeric — 添加对 numeric 类型的支持;
  • time — 添加对 time 类型的支持;
  • uuid — 添加对 uuid 类型的支持;
  • xml — 添加对 xml 类型的支持。

使用 Elephantry 的项目

  • todo — Todo 火箭示例应用;
  • explain — 一个 CLI 工具,将 postgresql explain 转换为图形;
  • sav — 一个简单的 CRUD 应用程序,用于存档购买的物品保修,用 rocket 构建;
  • out of gafam — 使用 actix 生成 GAFAM(youtube、facebook、instagram 和 twitter)的 RSS 源;
  • captainstat — 另一个简单的应用程序,使用 actix 构建,用于显示统计数据;
  • oxfeed — 一个具有 actix API 和 yew 前端的 RSS 阅读器。

如果您想在这里添加您的项目,请 创建一个 pull request

依赖关系

~4–39MB
~612K SLoC