Hello, I tried all the method to compare the different methods :
*TEST CODE* xref = time.time() self.UtilisateurCourant.Dispo = 1 session.merge(self.UtilisateurCourant, dont_load=True) session.flush() print "With ORM dont_load", time.time()-xref xref = time.time() session.query(Utilisateur).filter(Utilisateur.IdUtilisateur==self.UtilisateurCourant.IdUtilisateur).update({'Dispo':0}, False) print "With ORM force update", time.time()-xref xref = time.time() if self.UtilisateurCourant.IdUtilisateur: session.execute("UPDATE utilisateur SET Dispo=0 WHERE IdUtilisateur="+str(self.UtilisateurCourant.IdUtilisateur)) print "With ORM pure SQL", time.time()-xref import MySQLdb db = MySQLdb.connection(host="192.168.45.28", user="apm", passwd="apm", db="test_christian") xref = time.time() db.query("""UPDATE utilisateur SET Dispo=1 WHERE IdUtilisateur=1""") r = db.store_result() print "With MySQLdb without ORM", time.time()-xref *TEST RESULTS* With ORM dont_load 0.453000068665 With ORM force update 0.296999931335 With ORM pure SQL 0.31200003624 With MySQLdb without ORM 0.0939998626709 With ORM dont_load 0.452999830246 With ORM force update 0.297000169754 With ORM pure SQL 0.31200003624 With MySQLdb without ORM 0.0939998626709 With ORM dont_load 0.453000068665 With ORM force update 0.296999931335 With ORM pure SQL 0.31200003624 With MySQLdb without ORM 0.0940001010895 2009/9/30 Michael Bayer <mike...@zzzcomputing.com> > > Christian Démolis wrote: > > Thx for your answer. > > MakeReleased is a method of com object windows agent (self.agent = > > DispatchWithEvents('CosmoAgent.clsCCAgent', Evenement)) > > It takes 0 second to execute as we can see in the execute print > > yes I realized later there were two blocks of timer calls. The inclusion > of that code made the example harder to read. > > In particular using session.merge() with an object will issue a SELECT > first to locate the current row. this is likely the cause of the > slowness in this specific case since you seem to have a slow network > (profiling would reveal this too). Passing "dont_load=True" to merge() > will skip the SELECT step and trust that the state you are passing it is > the state that is within the database. > > > "Orm does additional steps" > > is it possible to force him update only one attribute of the object? > > you may say: > > > session.query(MyObject).filter(some_criterion).update({'attrname':somenewvalue}, > False) > > which will issue an UPDATE statement matching the criterion. this is the > fastest way by far using the ORM only. > > Changing the "False" to "evaluate" or "expire" will also update or expire > the state of your ORM instance - but that will add some overhead. > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---