On Tue, Jan 2, 2018 at 11:44 AM, Tim Chen <timch...@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+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