What was your justification of changing the name of my thread to a
completely different topic instead of starting a new thread?
I don't think thats good etiquette.
On Nov 29, 5:22 am, "Doug Farrell" <[EMAIL PROTECTED]> 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 [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
-~----------~----~----~----~------~----~------~--~---