tokio-rs/toasty
GitHub: tokio-rs/toasty
Toasty 是一个 Rust 异步 ORM,用于简化多数据库的数据操作和管理,提升开发效率。
Stars: 2452 | Forks: 96
Toasty
[][crates-url]
[][mit-url]
[][actions-url]
[][discord-url]
Toasty 支持 SQL 数据库(SQLite、PostgreSQL、MySQL)和 DynamoDB。它不隐藏数据库能力,而是根据目标数据库暴露其特性。
## 使用 Toasty
你将使用带 `#[derive(toasty::Model)]` 派生宏注解的 Rust 结构体来定义数据模型。这是一个 [hello-toasty](examples/hello-toasty/src/main.rs) 示例。
```
#[derive(Debug, toasty::Model)]
struct User {
#[key]
#[auto]
id: u64,
name: String,
#[unique]
email: String,
#[has_many]
todos: toasty::HasMany
,
}
#[derive(Debug, toasty::Model)]
struct Todo {
#[key]
#[auto]
id: u64,
#[index]
user_id: u64,
#[belongs_to(key = user_id, references = id)]
user: toasty::BelongsTo,
title: String,
}
```
然后,你可以轻松地操作数据模型:
```
// Create a new user and give them some todos.
let user = toasty::create!(User {
name: "John Doe",
email: "john@example.com",
todos: [
{ title: "Make pizza" },
{ title: "Finish Toasty" },
{ title: "Sleep" },
],
}).exec(&mut db).await?;
// Load the user from the database
let user = User::get_by_id(&mut db, &user.id).await?;
// Load and iterate the user's todos
let todos = user.todos().exec(&mut db).await?;
for todo in &todos {
println!("{:#?}", todo);
}
```
## SQL 与 NoSQL
Toasty 同时支持 SQL 和 NoSQL 数据库。当前的驱动程序包括 SQLite、PostgreSQL、MySQL 和 DynamoDB。然而,它并不旨在抽象数据库。相反,Toasty 顺应目标数据库的能力,旨在帮助用户避免对特定数据库发出低效的查询。
当同时针对 SQL 和 NoSQL 数据库时,Toasty 会为基于索引的访问模式生成查询方法(例如,仅提供 `get_by_id`)。当针对 SQL 数据库时,Toasty 可能允许任意附加查询约束。当针对 NoSQL 数据库时,Toasty 只允许特定目标数据库能够执行的约束。例如,使用 DynamoDB 时,查询方法可能基于表的主键生成,并且可以对排序键设置附加约束。
## 应用数据模型与数据库模式
Toasty 将应用数据模型与数据库的模式解耦。默认情况下,Toasty 应用程序的模式将与数据库模式 1:1 映射。但是,可以指定附加注解来自定义应用数据模型映射到数据库模式的方式。
## 路线图
开发优先级基于反馈和贡献。如果你遇到缺失的功能或粗糙的边缘情况,请提交 issue 或 pull request。
计划中的工作位于 [`docs/dev/roadmap.md`](docs/dev/roadmap.md)。
## 许可证
本项目采用 [MIT 许可证]。
### 贡献
除非你明确声明,否则任何由你有意提交以纳入 Toasty 的贡献,均应依据 MIT 许可证授权,且没有任何附加条款或条件。
标签:async/await, AWS服务, CRUD操作, derive宏, DynamoDB, NoSQL数据库, PostgreSQL, Rust异步运行时, Rust语言, SQLite, SQL数据库, Tokio, 关系型数据库, 关系映射, 可视化界面, 宏编程, 对象关系映射, 开源库, 异步ORM, 异步编程, 搜索引擎爬虫, 数据库, 数据库抽象, 数据库访问, 数据模型, 易用ORM, 测试用例, 轻量级ORM, 通知系统, 非关系型数据库