Expand description
§🐚 SeaORM
§Advanced Relations
Model complex relationships 1-1, 1-N, M-N, and even self-referential in a high-level, conceptual way.
§Familiar Concepts
Inspired by popular ORMs in the Ruby, Python, and Node.js ecosystem, SeaORM offers a developer experience that feels instantly recognizable.
§Feature Rich
SeaORM is a batteries-included ORM with filters, pagination, and nested queries to accelerate building REST, GraphQL, and gRPC APIs.
§Production Ready
With 250k+ weekly downloads, SeaORM is production-ready, trusted by startups and enterprises worldwide.
§Getting Started
Join our Discord server to chat with others!
Integration examples:
- Actix Example
- Axum Example
- GraphQL Example
- jsonrpsee Example
- Loco Example / Loco REST Starter
- Poem Example
- Rocket Example / Rocket OpenAPI Example
- Salvo Example
- Tonic Example
- Seaography Example (Bakery) / Seaography Example (Sakila)
If you want a simple, clean example that fits in a single file that demonstrates the best of SeaORM, you can try:
Let’s have a quick walk through of the unique features of SeaORM.
§Expressive Entity format
You don’t have to write this by hand! Entity files can be generated from an existing database using sea-orm-cli,
following is generated with --entity-format dense (new in 2.0).
mod user {
use sea_orm::entity::prelude::*;
#[sea_orm::model]
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
#[sea_orm(table_name = "user")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
pub name: String,
#[sea_orm(unique)]
pub email: String,
#[sea_orm(has_one)]
pub profile: HasOne<super::profile::Entity>,
#[sea_orm(has_many)]
pub posts: HasMany<super::post::Entity>,
}
}
mod post {
use sea_orm::entity::prelude::*;
#[sea_orm::model]
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]
#[sea_orm(table_name = "post")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i32,
pub user_id: i32,
pub title: String,
#[sea_orm(belongs_to, from = "user_id", to = "id")]
pub author: HasOne<super::user::Entity>,
#[sea_orm(has_many, via = "post_tag")] // M-N relation with junction
pub tags: HasMany<super::tag::Entity>,
}
}§Smart Entity Loader
The Entity Loader intelligently uses join for 1-1 and data loader for 1-N relations, eliminating the N+1 problem even when performing nested queries.
// join paths:
// user -> profile
// user -> post
// post -> post_tag -> tag
let smart_user = user::Entity::load()
.filter_by_id(42) // shorthand for .filter(user::COLUMN.id.eq(42))
.with(profile::Entity) // 1-1 uses join
.with((post::Entity, tag::Entity)) // 1-N uses data loader
.one(db)?
.unwrap();
// 3 queries are executed under the hood:
// 1. SELECT FROM user JOIN profile WHERE id = $
// 2. SELECT FROM post WHERE user_id IN (..)
// 3. SELECT FROM tag JOIN post_tag WHERE post_id IN (..)
smart_user
== user::ModelEx {
id: 42,
name: "Bob".into(),
email: "bob@sea-ql.org".into(),
profile: HasOne::Loaded(
profile::ModelEx {
picture: "image.jpg".into(),
}
.into(),
),
posts: HasMany::Loaded(vec![post::ModelEx {
title: "Nice weather".into(),
tags: HasMany::Loaded(vec![tag::ModelEx {
tag: "sunny".into(),
}]),
}]),
};§ActiveModel: nested persistence made simple
Persist an entire object graph: user, profile (1-1), posts (1-N), and tags (M-N) in a single operation using a fluent builder API. SeaORM automatically determines the dependencies and inserts or deletes objects in the correct order. This requires the SeaORM 2.0 dense entity format.
// this creates the nested object as shown above:
let user = user::ActiveModel::builder()
.set_name("Bob")
.set_email("bob@sea-ql.org")
.set_profile(profile::ActiveModel::builder().set_picture("image.jpg"))
.add_post(
post::ActiveModel::builder()
.set_title("Nice weather")
.add_tag(tag::ActiveModel::builder().set_tag("sunny")),
)
.save(db)?;§Schema first or Entity first? Your choice
SeaORM provides a powerful migration system that lets you create tables, modify schemas, and seed data with ease.
With SeaORM 2.0, you also get a first-class Entity First Workflow: simply define new entities or add columns to existing ones, and SeaORM will automatically detect the changes and create the new tables, columns, unique keys, and foreign keys.
// SeaORM resolves foreign key dependencies and creates the tables in topological order.
// Requires the `entity-registry` and `schema-sync` feature flags.
db.get_schema_registry("my_crate::entity::*").sync(db);§Ergonomic Raw SQL
Let SeaORM handle 95% of your transactional queries. For the remaining cases that are too complex to express, SeaORM still offers convenient support for writing raw SQL.
let user = Item { name: "Bob" }; // nested parameter access
let ids = [2, 3, 4]; // expanded by the `..` operator
let user: Option<user::Model> = user::Entity::find()
.from_raw_sql(raw_sql!(
Sqlite,
r#"SELECT "id", "name" FROM "user"
WHERE "name" LIKE {user.name}
AND "id" in ({..ids})
"#
))
.one(db)?;§Synchronous Support
sea-orm-sync provides the full SeaORM API without requiring an runtime, making it ideal for lightweight CLI programs with SQLite.
See the quickstart example for usage.
§Basics
§Select
SeaORM models 1-N and M-N relationships at the Entity level, letting you traverse many-to-many links through a junction table in a single call.
// find all models
let cakes: Vec<cake::Model> = Cake::find().all(db)?;
// find and filter
let chocolate: Vec<cake::Model> = Cake::find()
.filter(Cake::COLUMN.name.contains("chocolate"))
.all(db)?;
// find one model
let cheese: Option<cake::Model> = Cake::find_by_id(1).one(db)?;
let cheese: cake::Model = cheese.unwrap();
// find related models (lazy)
let fruit: Option<fruit::Model> = cheese.find_related(Fruit).one(db)?;
// find related models (eager): for 1-1 relations
let cake_with_fruit: Vec<(cake::Model, Option<fruit::Model>)> =
Cake::find().find_also_related(Fruit).all(db)?;
// find related models (eager): works for both 1-N and M-N relations
let cake_with_fillings: Vec<(cake::Model, Vec<filling::Model>)> = Cake::find()
.find_with_related(Filling) // for M-N relations, two joins are performed
.all(db) // rows are automatically consolidated by left entity
?;§Nested Select
Partial models prevent overfetching by letting you querying only the fields you need; it also makes writing deeply nested relational queries simple.
use sea_orm::DerivePartialModel;
#[derive(DerivePartialModel)]
#[sea_orm(entity = "cake::Entity")]
struct CakeWithFruit {
id: i32,
name: String,
#[sea_orm(nested)]
fruit: Option<fruit::Model>, // this can be a regular or another partial model
}
let cakes: Vec<CakeWithFruit> = Cake::find()
.left_join(fruit::Entity) // no need to specify join condition
.into_partial_model() // only the columns in the partial model will be selected
.all(db)?;§Insert
SeaORM’s ActiveModel lets you work directly with Rust data structures and persist them through a simple API. It’s easy to insert large batches of rows from different data sources.
let apple = fruit::ActiveModel {
name: Set("Apple".to_owned()),
..Default::default() // no need to set primary key
};
let pear = fruit::ActiveModel {
name: Set("Pear".to_owned()),
..Default::default()
};
// insert one: Active Record style
let apple = apple.insert(db)?;
apple.id == 1;
// insert one: repository style
let result = Fruit::insert(apple).exec(db)?;
result.last_insert_id == 1;
// insert many returning last insert id
let result = Fruit::insert_many([apple, pear]).exec(db)?;
result.last_insert_id == Some(2);§Insert (advanced)
You can take advantage of database specific features to perform upsert and idempotent insert.
// insert many with returning (if supported by database)
let models: Vec<fruit::Model> = Fruit::insert_many([apple, pear]).exec_with_returning(db)?;
models[0]
== fruit::Model {
id: 1, // database assigned value
name: "Apple".to_owned(),
cake_id: None,
};
// insert with ON CONFLICT on primary key do nothing, with MySQL specific polyfill
let result = Fruit::insert_many([apple, pear])
.on_conflict_do_nothing()
.exec(db)?;
matches!(result, TryInsertResult::Conflicted);§Update
ActiveModel avoids race conditions by updating only the fields you’ve changed, never overwriting untouched columns. You can also craft complex bulk update queries with a fluent query building API.
use sea_orm::sea_query::{Expr, Value};
let pear: Option<fruit::Model> = Fruit::find_by_id(1).one(db)?;
let mut pear: fruit::ActiveModel = pear.unwrap().into();
pear.name = Set("Sweet pear".to_owned()); // update value of a single field
// update one: only changed columns will be updated
let pear: fruit::Model = pear.update(db)?;
// update many: UPDATE "fruit" SET "cake_id" = "cake_id" + 2
// WHERE "fruit"."name" LIKE '%Apple%'
Fruit::update_many()
.col_expr(fruit::COLUMN.cake_id, fruit::COLUMN.cake_id.add(2))
.filter(fruit::COLUMN.name.contains("Apple"))
.exec(db)?;§Save
You can perform “insert or update” operation with ActiveModel, making it easy to compose transactional operations.
let banana = fruit::ActiveModel {
id: NotSet,
name: Set("Banana".to_owned()),
..Default::default()
};
// create, because primary key `id` is `NotSet`
let mut banana = banana.save(db)?;
banana.id == Unchanged(2);
banana.name = Set("Banana Mongo".to_owned());
// update, because primary key `id` is present
let banana = banana.save(db)?;§Delete
The same ActiveModel API consistent with insert and update.
// delete one: Active Record style
let orange: Option<fruit::Model> = Fruit::find_by_id(1).one(db)?;
let orange: fruit::Model = orange.unwrap();
orange.delete(db)?;
// delete one: repository style
let orange = fruit::ActiveModel {
id: Set(2),
..Default::default()
};
fruit::Entity::delete(orange).exec(db)?;
// delete many: DELETE FROM "fruit" WHERE "fruit"."name" LIKE '%Orange%'
fruit::Entity::delete_many()
.filter(fruit::COLUMN.name.contains("Orange"))
.exec(db)?;
§Raw SQL Query
The raw_sql! macro is like the format! macro but without the risk of SQL injection.
It supports nested parameter interpolation, array and tuple expansion, and even repeating group,
offering great flexibility in crafting complex queries.
#[derive(FromQueryResult)]
struct CakeWithBakery {
name: String,
#[sea_orm(nested)]
bakery: Option<Bakery>,
}
#[derive(FromQueryResult)]
struct Bakery {
#[sea_orm(alias = "bakery_name")]
name: String,
}
let cake_ids = [2, 3, 4]; // expanded by the `..` operator
// can use many APIs with raw SQL, including nested select
let cake: Option<CakeWithBakery> = CakeWithBakery::find_by_statement(raw_sql!(
Sqlite,
r#"SELECT "cake"."name", "bakery"."name" AS "bakery_name"
FROM "cake"
LEFT JOIN "bakery" ON "cake"."bakery_id" = "bakery"."id"
WHERE "cake"."id" IN ({..cake_ids})"#
))
.one(db)?;§🧭 Seaography: instant GraphQL API
Seaography is a GraphQL framework built for SeaORM. Seaography allows you to build GraphQL resolvers quickly. With just a few commands, you can launch a fullly-featured GraphQL server from SeaORM entities, complete with filter, pagination, relational queries and mutations!
Look at the Seaography Example to learn more.
§🖥️ SeaORM Pro: Professional Admin Panel
SeaORM Pro is an admin panel solution allowing you to quickly and easily launch an admin panel for your application - frontend development skills not required, but certainly nice to have!
SeaORM Pro has been updated to support the latest features in SeaORM 2.0.
Features:
- Full CRUD
- Built on React + GraphQL
- Built-in GraphQL resolver
- Customize the UI with TOML config
- Role Based Access Control (new in 2.0)
Read the Getting Started guide to learn more.

§SQL Server Support
SQL Server for SeaORM offers the same SeaORM API for MSSQL. We ported all test cases and examples, complemented by MSSQL specific documentation. If you are building enterprise software, you can request commercial access. It is currently based on SeaORM 1.0, but we will offer free upgrade to existing users when SeaORM 2.0 is finalized.
§Releases
SeaORM 2.0 has reached its release candidate phase. We’d love for you to try it out and help shape the final release by sharing your feedback.
SeaORM 2.0 is shaping up to be our most significant release yet - with a few breaking changes, plenty of enhancements, and a clear focus on developer experience.
- A Sneak Peek at SeaORM 2.0
- SeaORM 2.0: A closer look
- Role Based Access Control in SeaORM 2.0
- Seaography 2.0: A Powerful and Extensible GraphQL Framework
- SeaORM 2.0: New Entity Format
- SeaORM 2.0: Entity First Workflow
- SeaORM 2.0: Strongly-Typed Column
- What’s new in SeaORM Pro 2.0
- SeaORM 2.0: Nested ActiveModel
- A walk-through of SeaORM 2.0
- How we made SeaORM synchronous
- SeaORM 2.0 Migration Guide
- SeaORM now supports Arrow & Parquet
- SeaORM 2.0 with SQL Server Support
If you make extensive use of SeaQuery, we recommend checking out our blog post on SeaQuery 1.0 release:
§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.
We invite you to participate, contribute and together help build Rust’s future.
A big shout out to our contributors!
§Who’s using SeaORM?
Here is a short list of awesome open source software built with SeaORM. Feel free to submit yours!
| Project | GitHub | Tagline |
|---|---|---|
| Zed | A high-performance, multiplayer code editor | |
| Servo | The Servo Parallel Browser Engine Project | |
| OpenObserve | Open-source observability platform | |
| RisingWave | Stream processing and management platform | |
| Warpgate | Smart SSH bastion that works with any SSH client | |
| LLDAP | A light LDAP server for user management | |
| Svix | The enterprise ready webhooks service | |
| Ryot | The only self hosted tracker you will ever need | |
| OctoBase | A light-weight, scalable, offline collaborative data backend | |
| System Initiative | DevOps Automation Platform |
§Sponsorship
SeaQL.org is an independent open-source organization run by passionate developers. If you feel generous, a small donation via GitHub Sponsor will be greatly appreciated, and goes a long way towards sustaining the organization.
§Gold Sponsors
|
|
QDX pioneers quantum dynamics-powered drug discovery, leveraging AI and supercomputing to accelerate molecular modeling. We’re immensely grateful to QDX for sponsoring the development of SeaORM, the SQL toolkit that powers their data intensive applications.
§Silver Sponsors
We’re grateful to our silver sponsors: Digital Ocean, for sponsoring our servers. And JetBrains, for sponsoring our IDE.
|
|
|
§Mascot
A friend of Ferris, Terres the hermit crab is the official mascot of SeaORM. His hobby is collecting shells.
§🦀 Rustacean Sticker Pack
The Rustacean Sticker Pack is the perfect way to express your passion for Rust. Our stickers are made with a premium water-resistant vinyl with a unique matte finish.
Sticker Pack Contents:
- Logo of SeaQL projects: SeaQL, SeaORM, SeaQuery, Seaography
- Mascots: Ferris the Crab x 3, Terres the Hermit Crab
- The Rustacean wordmark
Support SeaQL and get a Sticker Pack! All proceeds contributes directly to the ongoing development of SeaQL projects.
Re-exports§
pub use crate::error::TryGetError;pub use crate::StreamTrait;streampub use sea_query;pub use strum;pub use sea_orm_arrow::arrow;with-arrowpub use entity::*;pub use error::*;pub use query::*;pub use schema::*;
Modules§
- dynamic
- Runtime-typed entity API for working with schemas that are not known at compile time.
- entity
- Entities and the types and traits that describe them.
- error
- Error types returned by SeaORM operations.
- metric
- Per-query metric collection hooks.
- query
- Query builders used to express SELECT, INSERT, UPDATE, and DELETE
statements against an
Entity. - rbac
rbac - Role-based access control for SeaORM (
rbacfeature). - schema
- Build
CREATE TABLE,CREATE TYPE, and related schema statements fromEntitydefinitions. - value
- Helpers for working with
sea_query::Value.
Macros§
- debug_
print Non- debug-print - Non-debug version
- debug_
query - Helper to get a raw SQL string from an object that impl
QueryTrait. - debug_
query_ stmt - Helper to get a
Statementfrom an object that implQueryTrait. - raw_sql
macros
Structs§
- Connect
Options - Configuration for opening a
DatabaseConnection: connection URL, pool sizing, timeouts, logging, and backend-specific options. - Cursor
- Keyset (cursor) pagination over an ordered query.
- Database
- Entry point for opening a
DatabaseConnection; seeDatabase::connect. - Database
Connection - A handle to a database — implements
ConnectionTraitandTransactionTraitso it works with every query and mutation method in SeaORM. - Database
Transaction - A live database transaction.
- Delete
Result - Result of a
DELETE: how many rows were removed. - Deleter
- Lower-level executor that runs a raw
sea_queryDeleteStatementand collects the result. Most code shouldn’t need it directly — preferEntityTrait::delete/delete_many/delete_by_id, which return strongly-typed builders. - Exec
Result - Result of a non-
SELECTstatement: anINSERT,UPDATE,DELETE, or DDL execution. Carries the row count (rows_affected) and, where the backend supports it, the last auto-generated primary key (last_insert_id). - Insert
Many Result - Result of inserting many ActiveModels: the primary key of the last row
inserted, or
Noneif the iterator was empty. - Insert
Result - Result of inserting a single ActiveModel: the primary key the database
assigned (or the one already on the ActiveModel if it had been
Set). - Inserter
- Lower-level executor that runs a raw
sea_queryInsertStatement. Most code shouldn’t need it directly — preferEntityTrait::insert/insert_many, which return strongly-typed builders. - Items
AndPages Number - Pair of totals returned by
Paginator::num_items_and_pages. - Mock
Database mock - Scripted in-memory database for unit tests.
- Mock
Database Connection mock - Defines a connection for the MockDatabase
- Mock
Database Connector mock - Defines a database driver for the MockDatabase
- Mock
Exec Result mock - Canned
ExecResult-equivalent returned by aMockDatabasefor non-SELECTstatements. - MockRow
mock - A single canned row returned by a
MockDatabase— a name → value map matching the columns the query selected. - Open
Transaction mock - An in-progress transaction recorded by a
MockDatabase. Once committed or rolled back, it becomes aTransactionin the transaction log. - Paginator
- Fetches a
Select’s results one page at a time withLIMIT/OFFSET. Build one withPaginatorTrait::paginate; usefetch_page/fetchto read rows andnum_pages/num_items_and_pagesfor totals. - Paginator
Stream sync - Synchronous
Iteratorwrapper around aPaginator, yielding one page of items per call. - Proxy
Database Connection proxy - Defines a connection for the [ProxyDatabase]
- Proxy
Database Connector proxy - Defines a database driver for the [ProxyDatabase]
- Proxy
Exec Result proxy - Defines the results obtained from a [ProxyDatabase]
- Proxy
Row proxy - Defines the structure of a Row for the [ProxyDatabase] which is just a BTreeMap<String, Value>
- Query
Access Audit rbac - Query
Result - One row of a query result.
- Query
Stream stream - The self-referencing struct.
- Restricted
Connection rbac - Wrapper of
DatabaseConnectionthat performs authorization on all executed queries for the current user. Note that raw SQLStatementis not allowed currently. - Restricted
Transaction rbac - Wrapper of
DatabaseTransactionthat performs authorization on all executed queries for the current user. Note that raw SQLStatementis not allowed currently. - Select
Five Model SelectorTraitfor a five-way join that yields(M, Option<N>, Option<O>, Option<P>, Option<Q>).- Select
Four Model SelectorTraitfor a four-way join that yields(M, Option<N>, Option<O>, Option<P>).- Select
Getable Tuple SelectorTraitadapter that decodes each row positionally into the tuple typeT.- Select
Getable Value SelectorTraitadapter that decodes each row as a tupleTwhose columns are addressed by the iden enumC(rather than positionally).- Select
Model SelectorTraitfor a query that yields a single model per row.- Select
SixModel SelectorTraitfor a six-way join that yields(M, Option<N>, Option<O>, Option<P>, Option<Q>, Option<R>).- Select
Three Model SelectorTraitfor a three-way join that yields(M, Option<N>, Option<O>).- Select
TwoModel SelectorTraitfor a join that yields(M, Option<N>)per row — the right side isNonefor outer-join rows with no match.- Select
TwoRequired Model SelectorTraitfor a join that yields(M, N)per row (both sides required, e.g. an inner join).- Selector
- A ready-to-execute
SELECTquery backed by aSelectStatement. The type parameterS(aSelectorTrait) determines what each row is decoded into. Build one viaSelect::into_modelorSelect::into_partial_model, then call.one(db)/.all(db)/.paginate(db, n). - Selector
Raw - Like
Selectorbut executes a rawStatement(e.g. built with theraw_sql!macro) instead of asea_queryquery. - Statement
- A SQL string together with its bound parameters, ready to send to a
connection. Build one yourself with
from_sql_and_values(or theraw_sql!macro), or get one out of any query builder viaQueryTrait::build. - Transaction
mock - A completed transaction recorded by a
MockDatabase— the ordered list of statements executed against it. Compare against expected SQL in tests viaTransaction::from_sql_and_values. - Transaction
Options - Configuration for starting a transaction
- Transaction
Stream stream - The self-referencing struct.
- Update
Result - Result of an
UPDATEthat doesn’t return rows: how many rows were modified. - Updater
- Lower-level executor that runs a raw
sea_queryUpdateStatement. Most code shouldn’t need it directly — preferEntityTrait::update/update_many, which return strongly-typed builders. - Values
Enums§
- Access
Mode - Access mode
- Audit
Error rbac - Database
Backend - Identifies which SQL dialect is in use. Passed around so that
sea_query-built statements can be rendered with the right placeholders, quoting, and feature support. Available variants are gated by feature flags — see the crate-level documentation. - Database
Connection Type - The driver-specific connection or pool wrapped by
DatabaseConnection. - Database
Executor - Either a borrowed
DatabaseConnection/DatabaseTransaction, or an ownedDatabaseTransaction. - Isolation
Level - Isolation level
- Sqlite
Transaction Mode - Which kind of transaction to start. Only supported by SQLite. https://www.sqlite.org/lang_transaction.html
- Transaction
Error - Error returned by
TransactionTrait::transaction: either the database itself failed, or the user closure returned anErr(causing a rollback). - TryInsert
Result - The result of executing a
crate::TryInsert. - Value
- Value variants
Traits§
- Audit
Trait rbac - ColIdx
- Column Index, used by
TryGetable. Implemented for&strandusize - Connection
Trait - A connection (or transaction) that can run queries against the database.
- Cursor
Trait - Extension trait that adds
.cursor_by(...)to anything that can be paginated with a keyset cursor — implemented forSelect,SelectTwo,SelectThree. - Iden
- Identifier
- Into
Database Executor - Conversion into a
DatabaseExecutor. Implemented for&DatabaseConnection,&DatabaseTransaction, and ownedDatabaseTransaction— let users hand any of them to functions that takeimpl IntoDatabaseExecutor<'_>. - Into
Mock Row mock - Conversion into a
MockRow. Implemented forModel(via#[derive(DeriveModel)]) and forBTreeMap<String, Value>so you can hand either toMockDatabase::append_query_results. - Mock
Database Trait mock - A Trait for any type wanting to perform operations on the MockDatabase
- Paginator
Trait - Extension trait that adds
.paginate(db, page_size)to anything page-able —Select,SelectTwo,Selector,SelectorRaw. - Proxy
Database Trait proxy - Defines the ProxyDatabaseTrait to save the functions
- Select
Ext - Helper trait for selectors with convenient methods
- Selector
Trait - Decodes one row of a
Selector/SelectorRawresult into a value of typeItem. Implemented by theSelectModel*types below; you usually never name this trait directly. - Statement
Builder - Anything that can be rendered to a backend-specific
Statement. - Stream
Trait stream - Streaming counterpart to
ConnectionTrait: yields query results row by row rather than collecting them all into aVec. Use this for large result sets when you don’t want to load everything into memory at once. - Transaction
Session - Represents an open transaction
- Transaction
Trait - Begin a database transaction.
- TryFrom
U64 - Build a value of
Selffrom au64last-insert-id returned by the database after an auto-incrementINSERT. - TryGetable
- Decode a single column value out of a
QueryResult. - TryGetable
Array - An interface to get an array of values from the query result.
A type can only implement
ActiveEnumorTryGetableFromJson, but not both. A blanket impl is provided forTryGetableFromJson, while the impl forActiveEnumis provided by theDeriveActiveEnummacro. So as an end user you won’t normally touch this trait. - TryGetable
From Json with-json - An interface to get a JSON from the query result
- TryGetable
Many - Decode multiple column values out of a
QueryResultinto a tuple.
Functions§
- from_
query_ result_ to_ proxy_ row proxy - Convert QueryResult to ProxyRow
Type Aliases§
- DbBackend
- Short alias for
DatabaseBackend. - DbConn
- Short alias for
DatabaseConnection.
Attribute Macros§
- compact_
model macros - model
macros
Derive Macros§
- Derive
Active Enum macros - A derive macro to implement
sea_orm::ActiveEnumtrait for enums. - Derive
Active Model macros - The DeriveActiveModel derive macro will implement ActiveModelTrait for ActiveModel which provides setters and getters for all active values in the active model.
- Derive
Active Model Behavior macros - Models that a user can override
- Derive
Active Model Ex macros - Derive a complex active model with relational fields
- Derive
Arrow Schema macros - The DeriveArrowSchema derive macro generates an
arrow_schema()method that returns an Apache Arrow schema from a SeaORM entity definition. - Derive
Column macros - The DeriveColumn derive macro will implement [ColumnTrait] for Columns. It defines the identifier of each column by implementing Iden and IdenStatic. The EnumIter is also derived, allowing iteration over all enum variants.
- Derive
Display macros - Derive
Entity macros - Create an Entity
- Derive
Entity Model macros - This derive macro is the ‘almighty’ macro which automatically generates Entity, Column, and PrimaryKey from a given Model.
- Derive
Iden macros - The DeriveIden derive macro will implement
sea_orm::Idenfor simplify Iden implementation. - Derive
Into Active Model macros - Will implement [
IntoActiveModel] for a struct, allowing conversion into an ActiveModel. This is useful for “form” or “input” structs (like from API requests) that turn into an entity’s ActiveModel but may omit some fields or provide optional values with defaults. - Derive
Migration Name macros - The DeriveMigrationName derive macro will implement
sea_orm_migration::MigrationNamefor a migration. - Derive
Model macros - The DeriveModel derive macro will implement ModelTrait for Model, which provides setters and getters for all attributes in the mod It also implements FromQueryResult to convert a query result into the corresponding Model.
- Derive
Model Ex macros - Derive a complex model with relational fields
- Derive
Partial Model macros - The DerivePartialModel derive macro will implement [
sea_orm::PartialModelTrait] for simplify partial model queries. Since 2.0, this macro cannot be used with theFromQueryResultmacro. - Derive
Primary Key macros - The DerivePrimaryKey derive macro will implement [PrimaryKeyToColumn] for PrimaryKey which defines tedious mappings between primary keys and columns. The EnumIter is also derived, allowing iteration over all enum variants.
- Derive
Related Entity macros - The DeriveRelatedEntity derive macro will implement seaography::RelationBuilder for RelatedEntity enumeration.
- Derive
Relation macros - The DeriveRelation derive macro will implement RelationTrait for Relation.
- Derive
Value Type macros - Implements traits for types that wrap a database value type.
- Enum
Iter - Creates a new type that iterates of the variants of an enum.
- From
Json Query Result macros - From
Query Result macros - Convert a query result into the corresponding Model.
- Iden
