Perfect, thanks Michael - I'll pass this on to the TG list 2009/5/11 Michael Bayer <mike...@zzzcomputing.com>
> > > clear out the session (or make a new one) between tests. while the > session attempts to weak reference its contents, it usually ends up > holding onto a lot of stuff due to a particular reference cycle > created by backrefs (I'm thinking of ways to eliminate that behavior). > > > On May 11, 2009, at 10:54 PM, James wrote: > > > > > Hi all, > > I'm trying to track down an error where running a full TurboGears unit > > test suite fails with a SQLAlchemy error, while running the single > > (failing) unit test passes OK. > > > > The SA error is of the form: > > FlushError: New instance terms...@0x2b15590 with identity key (<class > > 'yel.model.select_source.TermSite'>, (1, 1), None) conflicts with > > persistent instance terms...@0x2b8ad50 > > > > TermSite is an association table for a many-to-many relationship, > > which has a multi-column primary key: > > term_site_table = Table('term_site', metadata, > > Column('term_id', Integer, ForeignKey("term.id", > > ondelete="CASCADE"), primary_key=True), > > Column('site_id', Integer, ForeignKey("site.id", > > ondelete="CASCADE"), primary_key=True), > > Column('weight', Integer, default=1, nullable=False), > > ) > > > > The error seems to signify that SA thinks there is already an object > > waiting to be flushed with the same term_id and site_id. The fact that > > the test only fails when a full test suite is run implies that there > > is some state left over in between unit test executions. > > > > Abbreviated setUp and tearDown methods: > > def setUp(self): > > cherrypy.root = root.Root() > > turbogears.startup.startTurboGears() > > metadata.create_all() > > def tearDown(self): > > metadata.drop_all() > > turbogears.startup.stopTurboGears() > > > > TurboGears provides a sqlalchemy_cleanup method (here: > > http://svn.turbogears.org/branches/1.0/turbogears/testutil.py), but > > that seemed to be too aggressive, producing errors of the form: > > InvalidRequestError: Class 'Visit' entity name 'None' has no mapper > > associated with it > > > > So: > > - what is the recommended database initialisation / cleanup strategy > > for unit tests involving SA? > > - can anyone suggest how ORM state could be hanging around between > > unit tests (I'm using an in-memory DB)? > > - is there a convenient way to check on objects in the ORM, waiting to > > be flushed? > > > > This is SA 0.4.3 and TG 1.0.8 running against an in-memory sqlite DB > > > > Thanks! > > James > > > > (Cross-posted to TG list) > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---