On 12/04/2011 05:37 PM, alonn wrote:
> if i do dbsession.commit() I get an error message
> saying that in tg transaction handles the commit..
> so the plot thickens
in this case, import transaction; transaction commit().
here you may face the following problem: if your query runs with
dbsession.execute(textual_query), precede the above with:
from zope.sqlalchemy.datamanager import mark_changed
mark_changed(DBSession())

> actually now - one of the two cron jobs run fine while the other
> inserts the data, but since a commit is missing the moment I close the
> application the data is removed from the db and while the app is open
> it has an open handle  on the db so I can access It from the main
> program
> help!
> 
> On 4 דצמבר, 16:32, alex bodnaru <[email protected]> wrote:
>> On 12/04/2011 11:35 AM, alonn wrote:> thx alex - but I still have a problem
>>> since I'm currently calling the db update procedure (which does the
>>> dbsession.flush) - as a cron job and not through a controller (which
>>> would be added later - but only for monitoring purpose)
>>> So how can I release the transaction (or dbsession?) handle on the db
>>> when the procedure finishes?
>>
>> dbsession.commit() after the .flush(). usually ;)
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>> On 4 דצמבר, 05:32, alex bodnaru <[email protected]> wrote:
>>>> hi alon,
>>
>>>> On 12/02/2011 10:32 PM, alonn wrote:
>>
>>>>> in my turbogears application I'm writing to an mssql db with
>>>>> DBSession.flush() - this is a cron initiated method
>>>>> but after the commiting is made (my guess is transaction commit
>>>>> somewhere behind tg2.1 curtains) the db table is locked to access from
>>>>> another file (the main file that uses that db.. ) until I kill the tg
>>>>> application.
>>>>> I read that I can use transaction.doom() but I think that would also
>>>>> rollback the session (which I don' t want to - I just want to close
>>>>> the session ) and I don't know how this would influence the whole
>>>>> application (would tg bring it back to live next time I use DBSession?
>>>>> etc)
>>
>>>>> I'll be glad to some help here
>>
>>>> a transaction is being begun before your controller method is being 
>>>> invoked, for
>>>> every dbsession you have in your model.
>>>> if no exception occurs in your controller method, all these transactions 
>>>> are
>>>> being committed after your controller method ends.
>>>> you may dbsession.flush() at the point you want, disregarding the 
>>>> transaction
>>>> commit that will follow.
>>>> you may begin your controller method with transaction.doom() or .commit(), 
>>>> so
>>>> your code will not run in the transaction above. this will free your hands 
>>>> to
>>>> begin, doom (rollback) and commit wherever you choose.
>>
>>>>> 2.another small question  - how do I control when the db transaction
>>>>> is being commited? since I iterate through a list of object, and in
>>>>> each one using DBSession.flush but the actuall commiting occures only
>>>>> when the iterating is over , my guess is the transaction.commit() is
>>>>> somehow called and all the new objects are commited to the db. can I
>>>>> control when this commiting is made?
>>
>>>> hth,
>>>> alex
> 

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" 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/turbogears?hl=en.

Reply via email to