On Dec 11, 2011, at 8:35 AM, Amir Sasson wrote:

> After setting expire_on_commit to False, I hit inconsistency after
> commits in DB relations.
> For example, I've two tables Host and HostPort, where Host have a
> relation to Ports:
> 
> class HostPort(Base):
>    __tablename__ = 'hostport'
>    db_id = Column('id', Integer, primary_key=True) # the port's id
>    db_host_id = Column('host_id', Integer, ForeignKey('host.id'))
>    db_host = relation("HostDb")
> 
> class Host(Base):
>    __mapper_args__ = {'polymorphic_identity' : 'single'}
>    __tablename__ = 'host'
>    db_id = Column('id', Integer, primary_key=True) # the host's id
>    db_name = Column('name', String(100))
>    db_ports = relation("HostPortDb")
> 
> After I create a new HostPort (with an existing host as the host_id)
> and queries the host for it ports I do not get the newly created port.
> This problem did not occur when  expire_on_commit was set to True.
> 
> As I understand the problem occures since the appropriate host
> instance is not expired after the commit.
> 
> Is there any way overcome this issue, without expiring all the DB
> instances ?

The "dynamic" relationship will emit a SELECT each time, there's that which 
might be simplest here, or manually expire the contents of Host.db_ports with 
session.expire(host, ['db_ports']).


http://www.sqlalchemy.org/docs/orm/collections.html?highlight=dynamic%20relationship#dynamic-relationship-loaders


-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to