I guess what I must do immediately is to get myself a pair of new
glasses...Thank you Simon!

On Tue, Feb 10, 2015 at 2:36 PM, Simon King <si...@simonking.org.uk> wrote:

> On 10 Feb 2015, at 22:14, Bao Niu <niuba...@gmail.com> wrote:
> >
> > Why is assignment of a transient parent object does not automatically
> add this parent object into the session? But Parent.append(PersistedChild)
> will do the job nicely?
> > Here is my code:
> >
> > from sqlalchemy import Column, String, Integer, ForeignKey
> > from sqlalchemy import create_engine
> > from sqlalchemy.orm import sessionmaker
> > from sqlalchemy.orm import relationship, backref
> > from sqlalchemy.ext.declarative import declarative_base
> >
> > Base = declarative_base()
> >
> > class Department(Base):
> >     __tablename__ = 'department'
> >     id = Column(Integer, primary_key=True)
> >     name = Column(String)
> >
> > class Employee(Base):
> >     __tablename__ = 'employee'
> >     id = Column(Integer, primary_key=True)
> >     name = Column(String)
> >     department_id = Column(Integer, ForeignKey('department.id'))
> >     department = relationship(Department, backref=backref('employees',
> uselist=True))
> >
> > engine = create_engine('sqlite:///')
> > session = sessionmaker()
> > session.configure(bind=engine)
> > Base.metadata.create_all(engine)
> > s = session()
> > john = Employee(name='john')
> > it_department = Department(name='IT')
> > print(john in s) # should be False
> > print(it_department in s) # should be False
> > s.add(john)
> > print(john in s) # should be True
> > print(it_department in s) # should be False
> > john.departments = it_department # here I expect it_department(the
> Parent Object) would be automatically added to s in a cascade way, because
> of the backref
> > print(john in s) # should be True
> > print(it_department in s) # should be True, however this is not true.
> >
>
> I don’t know if this is the problem, but you appear to have a typo:
>
>   john.departments = it_department
>
> ...but the relationship is called “department”, not “departments”
>
> HTH,
>
> Simon
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/sqlalchemy/3EE9dZHpNj4/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to