Well first off the ORM on the persistence side only identifies objects by
primary key.   Is "bar" the primary key here ?  That would be one
requirement.

The semantics of INSERT on conflict most closely match those of
Session.merge().   If you're dealing with primary key, merge will do this
operation right now but it uses separate SELECT and INSERT/UPDATE.  an ORM
integration of merge() and INSERT on conflict would need some very
motivated contributors to come on board and help implement and test.  It
can be done as a third party extension to start with.

On Feb 15, 2017 2:13 PM, "Calvin Young" <[email protected]> wrote:

> I use the SQLAlchemy ORM in my application, and I know I can use something
> the following to perform an `INSERT...ON CONFLICT` statement:
>
> from sqlalchemy.dialects.postgresql import insert
>
>
>
> class Foo(Base):
>   ...
>   bar = Column(Integer)
>
>
> foo = Foo(bar=1)
>
>
> insert_stmt = insert(Foo).values(bar=foo.bar)
> do_update_stmt = insert_stmt.on_conflict_do_update(
>     set_=dict(
>         bar=insert_stmt.excluded.bar,
>     )
> )
>
> session.execute(do_update_stmt)
>
> Is there a better solution that doesn't require dropping into the
> Expression Language? It'd be great if we had a solution that automatically
> detected the fields that need to be inserted / update, and that
> automatically refreshed the `foo` instance after the committing to the db.
>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and
> Verifiable Example. See http://stackoverflow.com/help/mcve for a full
> description.
> ---
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to