I keep thinking one of my relatives has emailed me when you post here
and I get all excited. Any chance you can change your name ? :-)

2008/12/2 Doug Farrell <[EMAIL PROTECTED]>:
> Michael,
>
>
>
> Thanks for the pointer, that makes great sense, and once again points how my
> generally small database design skills. I'll update my code to try this out.
>
>
>
> Again,
>
> Thanks!
>
> Doug
>
>
>
> From: sqlalchemy@googlegroups.com [mailto:[EMAIL PROTECTED] On
> Behalf Of Michael Bayer
> Sent: Saturday, November 29, 2008 9:28 PM
> To: sqlalchemy@googlegroups.com
> Subject: [sqlalchemy] Re: New instance ExtraStat with identity key (...)
> conflicts with persistent instance ExtraStat
>
>
>
> Simon's suggestion about the duplicate "name" still holds.  Your relation
> from Stat->ExtraStat currently needs to be one-to-one since you cannot have
> more than one ExtraStat referencing a single Stat, due to the PK constraint
> on ExtraStat.name.  The error is raising at the point of query() since
> autoflush is kicking in - use session.flush() to isolate the error.
>
>
>
> On Nov 29, 2008, at 12:18 PM, Doug Farrell wrote:
>
> 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
>
>
>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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