Проблемы с обновлением отдельного объекта - PullRequest
2 голосов
/ 10 сентября 2010

У меня есть эта таблица:

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")

У меня есть список каналов, но они являются отдельными объектами.Я получаю их с помощью опции joinload, потому что иногда манипулирую этими объектами.Когда я это делаю, я обновляю объект.

На этот раз я пытаюсь добавить новый элемент в отдельный объект канала.Это код:

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)

Элемент вставлен в базу данных, но он не создает отношения в channel_items.

Кроме того, я получаю эту ошибку:

FlushError: New instance <Channel at 0xb75eeec> with identity key 
     (<class 'zeppelinlib.channel.ChannelTest.Channel'>, (152,)) 
     conflicts with persistent instance <Channel at 0xb598dec

Это проблема, потому что необходимо обновить канал в обе стороны (сервер и база данных), поэтому, если я получаю сообщение об ошибке, объект не обновляется и на сервере.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...