pub struct Insert<A>where
A: ActiveModelTrait,{ /* private fields */ }Expand description
Performs INSERT operations on a ActiveModel
Implementations§
Source§impl<A> Insert<A>where
A: ActiveModelTrait,
impl<A> Insert<A>where
A: ActiveModelTrait,
Sourcepub fn exec<'a, C>(self, db: &'a C) -> Result<InsertResult<A>, DbErr>where
C: ConnectionTrait,
A: 'a,
pub fn exec<'a, C>(self, db: &'a C) -> Result<InsertResult<A>, DbErr>where
C: ConnectionTrait,
A: 'a,
Execute an insert operation
Sourcepub fn exec_without_returning<'a, C>(self, db: &'a C) -> Result<u64, DbErr>where
C: ConnectionTrait,
A: 'a,
pub fn exec_without_returning<'a, C>(self, db: &'a C) -> Result<u64, DbErr>where
C: ConnectionTrait,
A: 'a,
Execute an insert operation without returning (don’t use RETURNING syntax)
Number of rows affected is returned
Sourcepub fn exec_with_returning<'a, C>(
self,
db: &'a C,
) -> Result<<A::Entity as EntityTrait>::Model, DbErr>
pub fn exec_with_returning<'a, C>( self, db: &'a C, ) -> Result<<A::Entity as EntityTrait>::Model, DbErr>
Execute an insert operation and return the inserted model (use RETURNING syntax if supported)
- To get back all inserted models, use [
exec_with_returning_many]. - To get back all inserted primary keys, use [
exec_with_returning_keys].
Sourcepub fn exec_with_returning_keys<'a, C>(
self,
db: &'a C,
) -> Result<Vec<<<<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey as PrimaryKeyTrait>::ValueType>, DbErr>
pub fn exec_with_returning_keys<'a, C>( self, db: &'a C, ) -> Result<Vec<<<<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey as PrimaryKeyTrait>::ValueType>, DbErr>
Execute an insert operation and return primary keys of inserted models
Sourcepub fn exec_with_returning_many<'a, C>(
self,
db: &'a C,
) -> Result<Vec<<A::Entity as EntityTrait>::Model>, DbErr>
pub fn exec_with_returning_many<'a, C>( self, db: &'a C, ) -> Result<Vec<<A::Entity as EntityTrait>::Model>, DbErr>
Execute an insert operation and return all inserted models
Source§impl<A> Insert<A>where
A: ActiveModelTrait,
impl<A> Insert<A>where
A: ActiveModelTrait,
Sourcepub fn one<M>(m: M) -> Selfwhere
M: IntoActiveModel<A>,
pub fn one<M>(m: M) -> Selfwhere
M: IntoActiveModel<A>,
Insert one Model or ActiveModel
Model
use sea_orm::{DbBackend, entity::*, query::*, tests_cfg::cake};
assert_eq!(
Insert::one(cake::Model {
id: 1,
name: "Apple Pie".to_owned(),
})
.build(DbBackend::Postgres)
.to_string(),
r#"INSERT INTO "cake" ("id", "name") VALUES (1, 'Apple Pie')"#,
);ActiveModel
use sea_orm::{DbBackend, entity::*, query::*, tests_cfg::cake};
assert_eq!(
Insert::one(cake::ActiveModel {
id: NotSet,
name: Set("Apple Pie".to_owned()),
})
.build(DbBackend::Postgres)
.to_string(),
r#"INSERT INTO "cake" ("name") VALUES ('Apple Pie')"#,
);Sourcepub fn many<M, I>(models: I) -> InsertMany<A>where
M: IntoActiveModel<A>,
I: IntoIterator<Item = M>,
pub fn many<M, I>(models: I) -> InsertMany<A>where
M: IntoActiveModel<A>,
I: IntoIterator<Item = M>,
Insert many Model or ActiveModel.
Alias to InsertMany::many.
use sea_orm::{DbBackend, entity::*, query::*, tests_cfg::cake};
assert_eq!(
Insert::many([
cake::Model {
id: 1,
name: "Apple Pie".to_owned(),
},
cake::Model {
id: 2,
name: "Orange Scone".to_owned(),
}
])
.build(DbBackend::Postgres)
.to_string(),
r#"INSERT INTO "cake" ("id", "name") VALUES (1, 'Apple Pie'), (2, 'Orange Scone')"#,
);Sourcepub fn on_conflict(self, on_conflict: OnConflict) -> Self
pub fn on_conflict(self, on_conflict: OnConflict) -> Self
Set ON CONFLICT logic
on conflict do nothing
use sea_orm::{DbBackend, entity::*, query::*, sea_query::OnConflict, tests_cfg::cake};
let orange = cake::ActiveModel {
id: ActiveValue::set(2),
name: ActiveValue::set("Orange".to_owned()),
};
assert_eq!(
cake::Entity::insert(orange)
.on_conflict(
OnConflict::column(cake::Column::Name)
.do_nothing()
.to_owned()
)
.build(DbBackend::Postgres)
.to_string(),
r#"INSERT INTO "cake" ("id", "name") VALUES (2, 'Orange') ON CONFLICT ("name") DO NOTHING"#,
);on conflict do update (upsert)
use sea_orm::{entity::*, query::*, sea_query::OnConflict, tests_cfg::cake, DbBackend};
let orange = cake::ActiveModel {
id: ActiveValue::set(2),
name: ActiveValue::set("Orange".to_owned()),
};
let query = cake::Entity::insert(orange)
.on_conflict(
OnConflict::column(cake::Column::Name)
.update_column(cake::Column::Name)
.to_owned()
);
assert_eq!(
query
.build(DbBackend::MySql)
.to_string(),
"INSERT INTO `cake` (`id`, `name`) VALUES (2, 'Orange') ON DUPLICATE KEY UPDATE `name` = VALUES(`name`)"
);
assert_eq!(
query
.build(DbBackend::Postgres)
.to_string(),
r#"INSERT INTO "cake" ("id", "name") VALUES (2, 'Orange') ON CONFLICT ("name") DO UPDATE SET "name" = "excluded"."name""#,
);
assert_eq!(
query
.build(DbBackend::Sqlite)
.to_string(),
r#"INSERT INTO "cake" ("id", "name") VALUES (2, 'Orange') ON CONFLICT ("name") DO UPDATE SET "name" = "excluded"."name""#,
);Sourcepub fn do_nothing(self) -> TryInsert<A>where
A: ActiveModelTrait,
pub fn do_nothing(self) -> TryInsert<A>where
A: ActiveModelTrait,
Allow insert statement to return without error if nothing’s been inserted
Sourcepub fn on_empty_do_nothing(self) -> TryInsert<A>where
A: ActiveModelTrait,
pub fn on_empty_do_nothing(self) -> TryInsert<A>where
A: ActiveModelTrait,
Alias to do_nothing
Sourcepub fn on_conflict_do_nothing(self) -> TryInsert<A>where
A: ActiveModelTrait,
pub fn on_conflict_do_nothing(self) -> TryInsert<A>where
A: ActiveModelTrait,
Set ON CONFLICT on primary key do nothing, but with MySQL specific polyfill.
use sea_orm::{entity::*, query::*, sea_query::OnConflict, tests_cfg::cake, DbBackend};
let orange = cake::ActiveModel {
id: ActiveValue::set(2),
name: ActiveValue::set("Orange".to_owned()),
};
assert_eq!(
cake::Entity::insert(orange.clone())
.on_conflict_do_nothing()
.build(DbBackend::MySql)
.to_string(),
r#"INSERT INTO `cake` (`id`, `name`) VALUES (2, 'Orange') ON DUPLICATE KEY UPDATE `id` = `id`"#,
);
assert_eq!(
cake::Entity::insert(orange.clone())
.on_conflict_do_nothing()
.build(DbBackend::Postgres)
.to_string(),
r#"INSERT INTO "cake" ("id", "name") VALUES (2, 'Orange') ON CONFLICT ("id") DO NOTHING"#,
);
assert_eq!(
cake::Entity::insert(orange)
.on_conflict_do_nothing()
.build(DbBackend::Sqlite)
.to_string(),
r#"INSERT INTO "cake" ("id", "name") VALUES (2, 'Orange') ON CONFLICT ("id") DO NOTHING"#,
);Trait Implementations§
Source§impl<A> QueryTrait for Insert<A>where
A: ActiveModelTrait,
impl<A> QueryTrait for Insert<A>where
A: ActiveModelTrait,
Source§type QueryStatement = InsertStatement
type QueryStatement = InsertStatement
Constrain the QueryStatement to StatementBuilder trait
Source§fn query(&mut self) -> &mut InsertStatement
fn query(&mut self) -> &mut InsertStatement
Get a mutable ref to the query builder
Source§fn as_query(&self) -> &InsertStatement
fn as_query(&self) -> &InsertStatement
Get an immutable ref to the query builder
Source§fn into_query(self) -> InsertStatement
fn into_query(self) -> InsertStatement
Take ownership of the query builder
Auto Trait Implementations§
impl<A> Freeze for Insert<A>
impl<A> RefUnwindSafe for Insert<A>where
A: RefUnwindSafe,
impl<A> Send for Insert<A>where
A: Send,
impl<A> Sync for Insert<A>where
A: Sync,
impl<A> Unpin for Insert<A>where
A: Unpin,
impl<A> UnwindSafe for Insert<A>where
A: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more