If I set expire_on_commit=False only the modified object will be written?
I don't know if there is a better way to do this (short version):
mail_items = mboxgroup_db.mail_item.filter(msg_filter).all() <---
this returns 636000 objects
for mail_item in mail_items:
do_something(mail_item)
mail_item.volume_id = 3
mboxgroup_db.commit()
Is it possible to get an iterator querying with Sqlsoup?
Regards,
Diego
On Tue, Dec 21, 2010 at 3:29 AM, Michael Bayer <[email protected]>wrote:
> You've got 636000 objects in your session which is quite large. The commit
> would like to expire them when the transaction ends and in this case it's
> the sheer number of objects present taking up the time spent. You should
> try to keep present in a session only those objects which you are working
> with currently, and for large jobs to batch the current set of objects into
> groups of no more than a few thousand. Failing that, you can set
> expire_on_commit=False for the session which will prevent the expire step
> from occurring. Note that clean objects leave the session as soon as you
> dereference them everywhere else.
>
> Sent from my iPhone
>
> On Dec 20, 2010, at 10:37 PM, Diego Woitasen <[email protected]> wrote:
>
>
>
> On Tue, Dec 21, 2010 at 12:35 AM, Diego Woitasen < <[email protected]>
> [email protected]> wrote:
>
>> Hi,
>> I have a python script that uses Sqlsoup to iterate over some rows of
>> table to modify them. The script is running really slow and I ran cProfile
>> to see where is the bottleneck. I've got this:
>>
>> 20549870 function calls (20523056 primitive calls) in 34.800 CPU
>> seconds
>>
>> Ordered by: cumulative time
>>
>> ncalls tottime percall cumtime percall filename:lineno(function)
>> 1 0.000 0.000 34.810 34.810 <string>:1(<module>)
>> 1 0.002 0.002 34.810 34.810 {execfile}
>> 1 0.095 0.095 34.808 34.808
>> zimbra-archive.py:34(<module>)
>> 20 0.000 0.000 25.618 1.281 sqlsoup.py:504(commit)
>> 20 0.000 0.000 25.618 1.281 scoping.py:128(do)
>> 20 0.000 0.000 25.618 1.281 session.py:631(commit)
>> 40/20 0.000 0.000 25.617 1.281 session.py:361(commit)
>> 20 1.262 0.063 25.565 1.278
>> session.py:290(_remove_snapshot)
>> 636600 20.002 0.000 23.254 0.000
>> state.py:220(expire_attributes)
>> 100 0.021 0.000 5.035 0.050 query.py:1447(all)
>> 32048 0.042 0.000 3.180 0.000 query.py:1619(instances)
>> 504 0.001 0.000 3.139 0.006 sqlsoup.py:549(__getattr__)
>> 504 0.003 0.000 3.138 0.006 sqlsoup.py:535(entity)
>>
>> The problem is commit, almost all the time used by the script is on
>> commit.
>>
>> Is there a faster way to modify every row? Or Should i use raw sql?
>>
>> Regards,
>> Diego
>>
>> --
>> Diego Woitasen
>> XTECH
>>
>
> I forgot the important lines of the code.
>
> mail_item.volume_id = archive_vol.id
> mboxgroup_db.commit()
>
> That's the only modification that I'm doing. A simple query with that
> change.
>
>
> Regards,
> Diego
>
> --
> Diego Woitasen
> XTECH
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<sqlalchemy%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
--
Diego Woitasen
XTECH
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.