> -----Original Message-----
> From: sqlalchemy@googlegroups.com 
> [mailto:[EMAIL PROTECTED] On Behalf Of Doug Farrell
> Sent: 28 November 2008 18:22
> To: sqlalchemy@googlegroups.com
> Subject: [sqlalchemy] New instance ExtraStat with identity 
> key (...) conflicts with persistent instance ExtraStat
> 
> 
> Hi all,
> 
> I'm having a problem with a new instance of a relation 
> conflicting with
> an existing instance. I'm using SA 0.5rc with Sqlite3. Here are my
> simplified classes:
> 
> class Stat(sqladb.Base):
>     __tablename__ = "stats"
>     name         = Column(String(32), primary_key=True)
>     total        = Column(Integer)
>     created      = Column(DateTime, default=datetime.datetime.now())
>     updated      = Column(DateTime)
>     states       = Column(PickleType, default={})
>     extraStats   = relation("ExtraStat", backref="stat")
>         
> class ExtraStat(sqladb.Base):
>     __tablename__ = "extrastats"
>     name         = Column(String(32), ForeignKey("stats.name"),
> primary_key=True)
>     total        = Column(Integer)
>     created      = Column(DateTime, default=datetime.datetime.now())
>     updated      = Column(DateTime)
>     states       = Column(PickleType, default={})
> 
> The above Stat class has a one-to-many relationship with the ExtraStat
> class (which I think I've implemented correctly). Later in 
> the program I
> create an in memory data model that has as part of it's components two
> dictionaries that contain Stat instances. Those Stat instances have
> relationships to ExtraStat instances. My problem comes in the 
> following
> when I'm trying to update the data in those instances/tables. 
> Here is a
> section of code that throws the exception:
> 
> pressName = "press%s" % pressNum
> # add new ExtraStat instances as relations
> self._addProductStatsPress(productType, pressName)
> self._addPressStatsProduct(pressName, productType)
> try:
>   extraStat = session.query(Stat). \
>               filter(Stat.name==productType). \
>               join("extraStats"). \
>               filter(ExtraStat.name==pressName).one()
> except:
>   extraStat = ExtraStat(pressName, ExtraStat.PRESS_TYPE)
>   self.productStats[productType].extraStats.append(extraStat)
>   extraStat.states.setdefault(sstate, 0)
>   extraStat.states[sstate] += 1
>   extraStat.updated = now
>   extraStat = session.merge(extraStat)
> try:
>   extraStat = session.query(Stat). \
>               filter(Stat.name==pressName). \
>               join("extraStats"). \
>               filter(ExtraStat.name==productType).one()   <==== throws
> exception right here
> except:
>   extraStat = ExtraStat(productType, ExtraStat.PRODUCT_TYPE)
>   self.pressStats[pressName].extraStats.append(extraStat)
>   extraStat.states.setdefault(sstate, 0)
>   extraStat.states[sstate] += 1
>   extraStat.updated = now
> 
> The marked area is wear it throws the exception. I'm not sure 
> what to do
> here to get past this, any help or ideas would be greatly appreciated.
> 
> The exact exception is as follows:
> Sqlalchemy.orm.exc.FlushError: New instance [EMAIL PROTECTED] 
> With identity
> key (<class '__main__.ExtraStat'>,(u'C',)) conflicts with persistent
> instance [EMAIL PROTECTED]
> 
> Thanks!
> Doug  
> 

This may not be the cause of your problem, but with your mapping above,
I think you can only have one ExtraStat per Stat, because they have the
same primary key (the 'name' column). If 'name' is the only thing that
uniquely distinguishes an ExtraStat, you can only have one per name.

Hope that helps,

Simon

--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to