also, when you say you "triggered" the problem, can you do that predictably ? can you send a small test program that does it every time ? otherwise it sounds like a threading thing (if thats at all possible).
On Oct 21, 2006, at 6:18 AM, François Wautier wrote: > > Hi Michael, > > Nope! Nothing of that sort. I couldn't care less about transaction > at this > point. > > All I do is > > > self.dbEng=sqlalchemy.create_engine > (myurl,strategy='threadlocal') > #debug > self.dbEng.echo=True > try: > self.dbConn=self.dbEng.connect() > self.dbSession=sqlalchemy.create_session(bind_to= > self.dbConn) > except sqlalchemy.exceptions.DBAPIError,msg: > QMessageBox.critical(None,"Race Management","Problem > with the > database: "+str(msg)) > sys.exit(-1) > > After that all I do is create "dbPeople", set the needed properties > and issue > a "flush" on the one session I have. > > I did trigger the problem I described at least twice And once more > just now). > The behaviour was exactly the same in all cases. > > I installed SQLAlchemy using the standard Gentoo command (emerge), > a md5sum on > the file used in the install gives > > fd9898c75d2773d075db89c6a99d31d6 /usr/portage/distfiles/ > SQLAlchemy-0.2.8.tar.gz > > Regards, > François > > > > >> hey François - >> >> are you using the SessionTransaction explicitly ? or >> connection.begin >> () ? Ive tried many combinations, and the only way I can reproduce >> the problem is by doing something incorrect: >> >> c = engine.connect() >> s = create_session(bind_to=c) >> >> tran = c.begin() >> session_tran = s.create_transaction() >> >> s.save(User()) >> s.flush() >> u = User() >> s.save(u) >> s.user_name = 'some user' >> >> tran.commit() >> session_tran.commit() >> >> the reason the above is incorrect is because the "Transaction" and >> "SessionTransaction" are not nested properly. >> >> The fix you have wouldnt be correct since the SessionTransaction is >> being closed (if not the underlying connection, which was the >> original bug), so it should remove its association from its host >> Session. >> >> On Oct 20, 2006, at 6:59 AM, François Wautier wrote: >>> Hi Michael, >>> >>> It seems I spoke too quickly. >>> >>> The problem is now when I try to flush a second time with a new >>> object. >>> Something like this >>> >>> newguy=dbPeople() >>> session.save(newguy) >>> newguy.Lastname="Doe" >>> newguy.Firstname="John" >>> newguy.gender="Ambiguous" >>> session.flush() >>> newguy=dbPeople() >>> session.save(newguy) >>> newguy.Lastname="Doe" >>> newguy.Firstname="Jane" >>> newguy.gender="Sheila" >>> session.flush() >>> >>> The last session flush results in a new record being written to the >>> database, >>> but an exception is raised, with the error message >>> >>> This transaction is inactive >>> >>> If one were to try to add more dbPeople, the records won't be saved >>> into the >>> database for the session keeps on using the same key value (the >>> table uses >>> an "auto_increment") >>> >>> >>> I hacked the code a bit and I solved the problem.... but I am far >>> from sure >>> that I did the right thing for all cases >>> >>> In lib/sqlalchemy/orm/session.py around line 67 I changed >>> >>> for t in self.connections.values(): >>> if (t[2]): >>> t[0].close() >>> self.session.transaction = None >>> >>> into >>> keeptransaction=False >>> for t in self.connections.values(): >>> if (t[2]): >>> t[0].close() >>> else: >>> keeptransaction=True >>> if not keeptransaction=False: >>> self.session.transaction = None >>> >>> I wonder if something like this would not be preferable (but I >>> again, I have >>> no clue as to what the consequences of my code is) >>> >>> closeall=False >>> for t in self.connections.values(): >>> if (t[2]): >>> closeall=True >>> if closeall: >>> for t in self.connections.values(): >>> t[0].close() >>> self.session.transaction = None >>> >>> >>> Regards, >>> François >> >> > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---