On Tue, Jan 2, 2018 at 12:06 PM, Tim Chen <timch...@gmail.com> wrote:
> Ah yes, makes sense.  So there is a slight difference in that add() will
> modify the original object, while merge() will not.  Thanks for the
> explanation!
>
> It would be great if this difference could be added to the docs here
> http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.merge

it's the last sentence of the first paragraph:

    The resulting target instance is then returned by the method; the
original source instance is left unmodified, and un-associated with
the Session if not already.

the method could use a quick code example duplicating that of the
"Merging" link right below
(http://docs.sqlalchemy.org/en/latest/orm/session_state_management.html#unitofwork-merging)
, the idea is people would have clicked that link to have an in-depth
understanding of what merging is.




>
> On Tuesday, January 2, 2018 at 11:47:06 AM UTC-5, Mike Bayer wrote:
>>
>> On Tue, Jan 2, 2018 at 11:44 AM, Tim Chen <timc...@gmail.com> wrote:
>> > Hrmm, that's not what I'm getting.  Maybe I'm misunderstanding something
>> > -
>> > here's a simple test to illustrate my example.  test_add() works as
>> > expected, test_merge() fails.
>> >
>> >
>> > import sqlalchemy as sa
>> > from sqlalchemy.orm import sessionmaker
>> > from sqlalchemy.ext.declarative import declarative_base
>> >
>> > Base = declarative_base()
>> >
>> >
>> > class User(Base):
>> >     __tablename__ = 'user'
>> >     id = sa.Column(sa.Integer, primary_key=True)
>> >     email = sa.Column(sa.Text)
>> >     profile = sa.orm.relationship('Profile', uselist=False,
>> > single_parent=True)
>> >
>> >
>> > class Profile(Base):
>> >     __tablename__ = 'profile'
>> >     id = sa.Column(sa.Integer, primary_key=True)
>> >     user_id = sa.Column(sa.Integer, sa.ForeignKey('user.id'),
>> > nullable=False)
>> >     interests = sa.Column(sa.Text)
>> >
>> >
>> > engine = sa.create_engine('postgresql://localhost/test')
>> > Base.metadata.create_all(engine)
>> > session = sessionmaker(bind=engine)()
>> >
>> >
>> > def create_user():
>> >     return User(
>> >         email='f...@bar.com',
>> >         profile=Profile(interests='Cooking, Dancing'),
>> >     )
>> >
>> >
>> > def test_merge():
>> >     user = create_user()
>> >     session.merge(user)
>>
>> yep...here's how to use merge:
>>
>>
>> merged_user = session.merge(user)
>>
>>
>> why the return value?  because there might already be an object in the
>> session that matches the primary key you might be giving.
>>
>> original user object is untouched
>>
>>
>>
>> >     session.commit()
>> >
>> >     assert user.id
>> >     assert user.profile.id
>> >
>> >
>> > def test_add():
>> >     user = create_user()
>> >     session.add(user)
>> >     session.commit()
>> >
>> >     assert user.id
>> >     assert user.profile.id
>> >
>> >
>> > test_add()
>> > test_merge()
>> >
>> >
>> > On Monday, January 1, 2018 at 9:49:55 PM UTC-5, Mike Bayer wrote:
>> >>
>> >> On Mon, Jan 1, 2018 at 9:18 PM, Tim Chen <timc...@gmail.com> wrote:
>> >> > When I merge() an object without a PK, I expect similar behavior to
>> >> > add(),
>> >> > in that the autogenerated PK is returned and set on the object.  Is
>> >> > that
>> >> > not
>> >> > expected behavior?
>> >>
>> >> it is, assuming the Session has flushed.
>> >>
>> >> >
>> >> > --
>> >> > 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 sqlalchemy+...@googlegroups.com.
>> >> > To post to this group, send email to sqlal...@googlegroups.com.
>> >> > 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 sqlalchemy+...@googlegroups.com.
>> > To post to this group, send email to sqlal...@googlegroups.com.
>> > 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 sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> 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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to