Yes, I've done that. I doesn't work either.
for chan in channels:
if chan.id == channel.id:
chan = session.merge(channel)
break
On Sep 13, 2:27 pm, Michael Bayer <[email protected]> wrote:
> On Sep 13, 2010, at 2:13 PM, Alvaro Reinoso wrote:
>
>
>
> > If I merge the updated channel like you can see in this piece of code
> > it's working:
>
> > def insertXML(channels, strXml):
> > """Insert a new channel given XML string"""
> > channel = Channel()
> > session = rdb.Session()
>
> > channel.fromXML(strXml)
> > fillChannelTemplate(channel, channels)
> > for item in channel.items:
> > if item.id == 0:
> > item.id = None
> > break
> > session.merge(channel)
>
> > for chan in channels:
> > if chan.id == channel.id:
> > chan.items.append(item)
> > break
>
> > My problem is I'm using channels, it's a list of channels which I save
> > it in HTTP session object. The channels list is a detached object
> > which I get using joinload option. So in this case, I update the
> > object correctly in database, but It isn't persistent in channels if I
> > do this:
>
> > for chan in channels:
> > if chan.id == channel.id:
> > chan.items.append(item)
> > break
>
> > Do you have any idea how I can solve this problem? or another
> > approach?
>
> here:
>
> > session.merge(channel)
>
> use the return value of merge():
>
> channel = session.merge(channel)
>
> the returned channel plus all children is the fully merged result.
>
>
>
> > Thanks!
>
> > On Sep 10, 5:09 pm, Michael Bayer <[email protected]> wrote:
> >> On Sep 10, 2010, at 2:57 PM, Alvaro Reinoso wrote:
>
> >>> Hello guys,
>
> >>> I have this table:
>
> >>> class Channel(rdb.Model):
> >>> rdb.metadata(metadata)
> >>> rdb.tablename("channels")
>
> >>> id = Column("id", Integer, primary_key=True)
> >>> title = Column("title", String(100))
> >>> hash = Column("hash", String(50))
> >>> runtime = Column("runtime", Float)
>
> >>> items = relationship(MediaItem, secondary="channel_items",
> >>> order_by=MediaItem.position, backref="channels")
>
> >>> I have a list of channels, but they are detached objects. I get them
> >>> using joinedload option because I maniputale those objects sometimes.
> >>> When I do that, I update the object.
>
> >>> This time, I'm trying to add a new item to a detached channel object.
> >>> This is the code:
>
> >>> def insertXML(channels, strXml):
> >>> """Insert a new channel given XML string"""
> >>> channel = Channel()
> >>> session = rdb.Session()
> >>> result = ""
>
> >>> channel.fromXML(strXml)
> >>> fillChannelTemplate(channel, channels)
> >>> if channel.id == 0:
> >>> session.add(channel)
> >>> session.flush()
> >>> channels.append(channel)
> >>> else:
> >>> for chan in channels:
> >>> if chan.id == channel.id:
> >>> chan.runtime = channel.runtime
> >>> chan.modified = datetime.date.today()
>
> >>> for item in channel.items:
> >>> if item.id == 0:
> >>> chan.items.append(item)
>
> >>> session.merge(chan)
>
> >>> The item is inserted in the database, but It doesn't create the
> >>> relation in channel_items.
>
> >>> Besides, I get this error:
>
> >>> FlushError: New instance <Channel at 0xb75eeec> with identity key
> >>> (<class 'zeppelinlib.channel.ChannelTest.Channel'>, (152,)) conflicts
> >>> with persistent instance <Channel at 0xb598dec
>
> >> anytime you have that error you should be using merge() to merge state
> >> into that which is already existing, the return value from merge() is then
> >> what you need to use for your new state. I see you tried using merge
> >> earlier but your issue is not clear.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "sqlalchemy" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected].
> > For more options, visit this group
> > athttp://groups.google.com/group/sqlalchemy?hl=en.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.