π We are pleased to release SeaORM 0.6.0
today! Here are some feature highlights π:
Migrationβ
[#335] Version control you database schema with migrations written in SeaQuery or in raw SQL. View migration docs to learn more.
Setup the migration directory by executing
sea-orm-cli migrate init
.migration
βββ Cargo.toml
βββ README.md
βββ src
βββ lib.rs
βββ m20220101_000001_create_table.rs
βββ main.rsDefines the migration in SeaQuery.
use sea_schema::migration::prelude::*;
pub struct Migration;
impl MigrationName for Migration {
fn name(&self) -> &str {
"m20220101_000001_create_table"
}
}
#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.create_table( ... )
.await
}
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.drop_table( ... )
.await
}
}Apply the migration by executing
sea-orm-cli migrate
.$ sea-orm-cli migrate
Applying all pending migrations
Applying migration 'm20220101_000001_create_table'
Migration 'm20220101_000001_create_table' has been applied
Support DateTimeUtc & DateTimeLocal in Modelβ
[#489] Represents database's timestamp column in Model with attribute of type DateTimeLocal
(chrono::DateTime<Local>
) or DateTimeUtc
(chrono::DateTime<Utc>
).
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "satellite")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
pub satellite_name: String,
pub launch_date: DateTimeUtc,
pub deployment_date: DateTimeLocal,
}
Mock Join Resultsβ
[#455] Constructs mock results of related model with tuple of model.
let db = MockDatabase::new(DbBackend::Postgres)
// Mocking result of cake with its related fruit
.append_query_results(vec![vec![(
cake::Model {
id: 1,
name: "Apple Cake".to_owned(),
},
fruit::Model {
id: 2,
name: "Apple".to_owned(),
cake_id: Some(1),
},
)]])
.into_connection();
assert_eq!(
cake::Entity::find()
.find_also_related(fruit::Entity)
.all(&db)
.await?,
vec![(
cake::Model {
id: 1,
name: "Apple Cake".to_owned(),
},
Some(fruit::Model {
id: 2,
name: "Apple".to_owned(),
cake_id: Some(1),
})
)]
);
Support Max Connection Lifetime Optionβ
[#493] You can set the maximum lifetime of individual connection with the max_lifetime
method.
let mut opt = ConnectOptions::new("protocol://username:password@host/database".to_owned());
opt.max_lifetime(Duration::from_secs(8))
.max_connections(100)
.min_connections(5)
.connect_timeout(Duration::from_secs(8))
.idle_timeout(Duration::from_secs(8))
.sqlx_logging(true);
let db = Database::connect(opt).await?;
SeaORM CLI & Codegen Updatesβ
- [#433] Generates the
column_name
macro attribute for column which is not named in snake case - [#335] Introduces migration subcommands
sea-orm-cli migrate
Sponsorβ
Our GitHub Sponsor profile is up! If you feel generous, a small donation will be greatly appreciated.
A big shout out to our sponsors π:
Communityβ
SeaQL is a community driven project. We welcome you to participate, contribute and together build for Rust's future.
Here is the roadmap for SeaORM 0.7.x
.