Christian Démolis wrote:
> 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

please use the profile module.  The call chain from
Session.execute(somestring) down to connection.execute() is definitely not
three times slower than connection.execute() itself.   On my workstation
here I can execute hundreds of ORM queries per second.


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