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

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 as ActiveModelTrait>::Entity as EntityTrait>::Model, DbErr>> + '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

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 as ActiveModelTrait>::Entity as EntityTrait>::Model>, DbErr>> + '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) -> Insert<A>
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) -> Insert<A>
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) -> Insert<A>
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) -> Insert<A>
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) -> Insert<A>
where M: IntoActiveModel<A>, I: IntoIterator<Item = M>,

Add many Models to Self

Source

pub fn on_conflict(self, on_conflict: OnConflict) -> Insert<A>

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<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<A> Default for Insert<A>

Source§

fn default() -> Insert<A>

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: DatabaseBackend) -> 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