Anthony is right
 if you catch the exception yourself web2py stll commits because does
not detect failure. If catch the exception and want to rollback you
have to be explicit. Still. It is in a transaction.

On Nov 24, 5:11 pm, Anthony <[email protected]> wrote:
> Note, in your try...except example, you could do:
>
>     except:
>         db.rollback()
>         redirect(URL('error'))
>
> Seehttp://web2py.com/book/default/chapter/06#commit-and-rollback.
>
> Anthony
>
>
>
> On Thursday, November 24, 2011 5:40:39 PM UTC-5, Anthony wrote:
>
> > But what about your first example, without the try...except? Are you
> > saying that if the other_table.insert() fails, the doc.update_record()
> > still succeeds in committing? I don't think that should be the case. If
> > there's an uncaught exception before the response is returned, web2py
> > should roll back any open transactions.
>
> > Anthony
>
> > On Thursday, November 24, 2011 2:11:19 PM UTC-5, Jose wrote:
>
> >> On 24 nov, 15:31, Massimo Di Pierro <[email protected]>
> >> wrote:
> >> > They run in the same transactions by default.
>
> >> Nop!
> >> Please see the following example
>
> >> model:
>
> >> tb_1 = db.define_table('t1',
> >>     Field('field1'),
> >>     Field('field2', 'integer')
> >> )
>
> >> tb_2 = db.define_table('t2',
> >>     Field('field1'),
> >>     Field('field2', 'integer')
> >> )
>
> >> controller:
>
> >> def test():
> >>     form = SQLFORM(tb_1)
> >>     if form.accepts(request.vars, session):
> >>         try:
> >>             tb_2.insert(field1='test', field2='1dfdfh') #field2 is
> >> integer, must be a mistake
> >>             redirect(URL('test'))
> >>         except:
> >>             redirect(URL('error'))
> >>     elif form.errors:
> >>         response.flash = 'errors'
> >>     return dict(form=form)
>
> >> def error():
> >>     return dict()
>
> >> despite the error, the record is inserted in tb_1. And I believe so,
> >> because first submit occurs. So I asked how to include submit and
> >> subsequent actions in a tranasaccion.
>
> >> Jose

Reply via email to