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
-~----------~----~----~----~------~----~------~--~---

Reply via email to