Hi I'm testing transactions with sqlobject. I found the doInTransaction method
so I made a test: (python2.4 sqlobject 0.8.0 mysql innodb table) class TestSql(SQLObject): k = IntCol(default=None) v = IntCol(default=None) def init(): TestSql.dropTable() TestSql.createTable(ifNotExists=True) TestSql(k=1,v=1) TestSql(k=2,v=2) def inc(k): a=TestSql.select(TestSql.q.k==k,forUpdate=True)[0] sleep(0.1) a.v += 1 def go2(k): for a in range(100): sqlhub.doInTransaction(inc,k) go2(1) At the end, I have an sql error saying that there is no more connection possible. There are indeed 100 processes sleeping. What is creating all these connections? Now some more questions. What is the difference between - using a transaction object - simply using connection.query('begin;') and connection.query('commit;') example: def inc(k): connection.query('begin;') a=TestSql.select(TestSql.q.k==k,forUpdate=True)[0] sleep(0.1) a.v += 1 connection.query('commit;') this works just fine. Any problem with this approach? Isn't it optimal and thread safe? What about the cache? Do I have to add in sqlmeta: cacheValues=False? When doing this, I saw the debug log and it is terribly not efficient. I tested this with 2 process and it was ok. Is it ok with 1 multithreaded process? My application has 2 multithreaded (web server) process over 2 distant replicated mysql databases. I've read somewhere that mysql transaction should work with replicated databases. Thanks for your help ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ sqlobject-discuss mailing list sqlobject-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss