Skip to main content

Insert

Struct Insert 

Source
pub struct Insert<A>{ /* private fields */ }
Expand description

Performs INSERT operations on a ActiveModel

Implementationsยง

Sourceยง

impl<A> Insert<A>

Source

pub fn exec<'a, C>( self, db: &'a C, ) -> impl Future<Output = Result<InsertResult<A>, DbErr>> + 'a
where C: ConnectionTrait, A: 'a,

Execute an insert operation

Source

pub fn exec_without_returning<'a, C>( self, db: &'a C, ) -> impl Future<Output = Result<u64, DbErr>> + 'a
where <A::Entity as EntityTrait>::Model: IntoActiveModel<A>, C: ConnectionTrait, A: 'a,

Execute an insert operation without returning (donโ€™t use RETURNING syntax) Number of rows affected is returned

Source

pub fn exec_with_returning<'a, C>( self, db: &'a C, ) -> impl Future<Output = Result<<A::Entity as EntityTrait>::Model, DbErr>> + 'a
where <A::Entity as EntityTrait>::Model: IntoActiveModel<A>, C: ConnectionTrait, A: 'a,

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].
Source

pub fn exec_with_returning_keys<'a, C>( self, db: &'a C, ) -> impl Future<Output = Result<Vec<<<<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey as PrimaryKeyTrait>::ValueType>, DbErr>> + 'a
where <A::Entity as EntityTrait>::Model: IntoActiveModel<A>, C: ConnectionTrait, A: 'a,

Execute an insert operation and return primary keys of inserted models

ยงPanics

Panics if the database backend does not support INSERT RETURNING.

Source

pub fn exec_with_returning_many<'a, C>( self, db: &'a C, ) -> impl Future<Output = Result<Vec<<A::Entity as EntityTrait>::Model>, DbErr>> + 'a
where <A::Entity as EntityTrait>::Model: IntoActiveModel<A>, C: ConnectionTrait, A: 'a,

Execute an insert operation and return all inserted models

ยงPanics

Panics if the database backend does not support INSERT RETURNING.

Sourceยง

impl<A> Insert<A>

Source

pub fn one<M>(m: M) -> Self
where M: IntoActiveModel<A>,

Insert one Model or ActiveModel

Model

use sea_orm::{entity::*, query::*, tests_cfg::cake, DbBackend};

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::{entity::*, query::*, tests_cfg::cake, DbBackend};

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')"#,
);
Source

pub fn many<M, I>(models: I) -> Self
where M: IntoActiveModel<A>, I: IntoIterator<Item = M>,

Insert many Model or ActiveModel

use sea_orm::{entity::*, query::*, tests_cfg::cake, DbBackend};

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')"#,
);
Source

pub fn add<M>(self, m: M) -> Self
where M: IntoActiveModel<A>,

Add a Model to Self

ยงPanics

Panics if the rows have different column sets from whatโ€™ve previously been cached in the query statement

Source

pub fn add_multi<M, I>(self, models: I) -> Self
where M: IntoActiveModel<A>, I: IntoIterator<Item = M>,

๐Ÿ‘ŽDeprecated since 1.1.3:

Please use Insert::add_many which does not panic

Add many Models to Self. This is the legacy implementation priori to 1.1.3.

ยงPanics

Panics if the rows have different column sets

Source

pub fn add_many<M, I>(self, models: I) -> Self
where M: IntoActiveModel<A>, I: IntoIterator<Item = M>,

Add many Models to Self

Source

pub fn on_conflict(self, on_conflict: OnConflict) -> Self

On conflict

on conflict do nothing

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)
        .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

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)
        .on_conflict(
            OnConflict::column(cake::Column::Name)
                .update_column(cake::Column::Name)
                .to_owned()
        )
        .build(DbBackend::Postgres)
        .to_string(),
    r#"INSERT INTO "cake" ("id", "name") VALUES (2, 'Orange') ON CONFLICT ("name") DO UPDATE SET "name" = "excluded"."name""#,
);
Source

pub fn do_nothing(self) -> TryInsert<A>

Allow insert statement to return without error if nothingโ€™s been inserted

Source

pub fn on_empty_do_nothing(self) -> TryInsert<A>

Alias to do_nothing

Source

pub fn on_conflict_do_nothing(self) -> TryInsert<A>

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> Debug for Insert<A>

Sourceยง

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Sourceยง

impl<A> Default for Insert<A>

Sourceยง

fn default() -> Self

Returns the โ€œdefault valueโ€ for a type. Read more
Sourceยง

impl<A> QueryTrait for Insert<A>

Sourceยง

type QueryStatement = InsertStatement

Constrain the QueryStatement to QueryStatementBuilder trait
Sourceยง

fn query(&mut self) -> &mut InsertStatement

Get a mutable ref to the query builder
Sourceยง

fn as_query(&self) -> &InsertStatement

Get an immutable ref to the query builder
Sourceยง

fn into_query(self) -> InsertStatement

Take ownership of the query builder
Sourceยง

fn build(&self, db_backend: DbBackend) -> Statement

Build the query as Statement
Sourceยง

fn apply_if<T, F>(self, val: Option<T>, if_some: F) -> Self
where Self: Sized, F: FnOnce(Self, T) -> Self,

Apply an operation on the QueryTrait::QueryStatement if the given Option<T> is Some(_) Read more

Auto Trait Implementationsยง

ยง

impl<A> Freeze for Insert<A>

ยง

impl<A> !RefUnwindSafe for Insert<A>

ยง

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> UnsafeUnpin for Insert<A>

ยง

impl<A> !UnwindSafe for Insert<A>

Blanket Implementationsยง

Sourceยง

impl<T> Any for T
where T: 'static + ?Sized,

Sourceยง

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Sourceยง

impl<T> Borrow<T> for T
where T: ?Sized,

Sourceยง

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Sourceยง

impl<T> BorrowMut<T> for T
where T: ?Sized,

Sourceยง

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Sourceยง

impl<T> From<T> for T

Sourceยง

fn from(t: T) -> T

Returns the argument unchanged.

Sourceยง

impl<T> Instrument for T

Sourceยง

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Sourceยง

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Sourceยง

impl<T, U> Into<U> for T
where U: From<T>,

Sourceยง

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Sourceยง

impl<T> IntoEither for T

Sourceยง

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 more
Sourceยง

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Sourceยง

impl<T> Same for T

Sourceยง

type Output = T

Should always be Self
Sourceยง

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Sourceยง

type Error = Infallible

The type returned in the event of a conversion error.
Sourceยง

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Sourceยง

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Sourceยง

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Sourceยง

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Sourceยง

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Sourceยง

fn vzip(self) -> V

Sourceยง

impl<T> WithSubscriber for T

Sourceยง

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Sourceยง

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Sourceยง

impl<T> ErasedDestructor for T
where T: 'static,