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.