Built with 🔥 by 🌊🦀🐚
SeaORM
SeaORM is a relational ORM to help you build light weight and concurrent web services in Rust.
Features
-
Async
Relying on SQLx, SeaORM is a new library with async support from day 1.
-
Dynamic
Built upon SeaQuery, SeaORM allows you to build complex queries without 'fighting the ORM'.
-
Testable
Use mock connections to write unit tests for your logic.
-
Service Oriented
Quickly build services that join, filter, sort and paginate data in APIs.
A quick taste of SeaORM
Entity
use *;
Select
// find all models
let cakes: = find.all.await?;
// find and filter
let chocolate: = find
.filter
.all
.await?;
// find one model
let cheese: = find_by_id.one.await?;
let cheese: Model = cheese.unwrap;
// find related models (lazy)
let fruits: = cheese.find_related.all.await?;
// find related models (eager)
let cake_with_fruits: =
find.find_with_related.all.await?;
Insert
let apple = ActiveModel ;
let pear = ActiveModel ;
// insert one
let pear = pear.insert.await?;
// insert many
insert_many.exec.await?;
Update
use ;
let pear: = find_by_id.one.await?;
let mut pear: ActiveModel = pear.unwrap.into;
pear.name = Set;
// update one
let pear: ActiveModel = pear.update.await?;
// update many: UPDATE "fruit" SET "cake_id" = NULL WHERE "fruit"."name" LIKE '%Apple%'
update_many
.col_expr
.filter
.exec
.await?;
Save
let banana = ActiveModel ;
// create, because primary key `id` is `Unset`
let mut banana = banana.save.await?;
banana.name = Set;
// update, because primary key `id` is `Set`
let banana = banana.save.await?;
Delete
let orange: = find_by_id.one.await?;
let orange: ActiveModel = orange.unwrap.into;
// delete one
delete.exec.await?;
// or simply
orange.delete.await?;
// delete many: DELETE FROM "fruit" WHERE "fruit"."name" LIKE 'Orange'
delete_many
.filter
.exec
.await?;
Learn More
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.