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)
    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 <javascript:>> 
> 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 <javascript:>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>. 
> > 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