every request is done in a cursor. every cursor by default in the dbapi 
spec is executed inside a transaction.
Unless you do db.commit() and db.rollback() manually, every relational 
engine will either "save" all the modifications in a single transaction or 
it will rollback all of them.

On Friday, December 20, 2013 2:23:03 PM UTC+1, Johann Spies wrote:
>
> Apologies - message sent prematurely.
>
>
> On 20 December 2013 15:18, Johann Spies <[email protected] <javascript:>
> > wrote:
>
>> I have never used after_insert or before_insert before and the 
>> documentation in the book does not answer enough of my questions.
>>
>>
>> Having the following models I want to create an invoice and record some 
>> of its particulars in the invoice table and then link the transactions that 
>> were invoiced to the invoice number:
>>
>> db.define_table('invoice',
>>                 Field('invoice_date', 'date', 
>>                       requires=IS_NOT_EMPTY()),
>>                 Field('client', 'reference client',
>>                       requires=IS_NOT_EMPTY(),
>>                       represent = lambda value, row: A('{}'.format(
>> row.client.name),
>>                                                        
>> _href=URL('show_client', args=value))),
>>                 Field('from_date', 'date'),
>>                 Field('to_date', 'date'))
>>
>> db.define_table('transactions',
>>                 Field('client', 'reference client',
>>                       represent = lambda value, row: A('{}'.format(
>> row.client.name),
>>                                                   
>> _href=URL('show_client', args=value))),
>>              ...
>> Field('invoice', 'reference invoice'))
>>
>>
>>
> The invoice will be created using the client, from_date and to_date 
> particulars making a summary of what is going on the transactions-table 
> which also has a transaction_date field not shown above.
>
> I want to ensure that the invoice record gets inserted and then all the 
> transactions updated with the invoice-id in a way that if the latter 
> process fails the transaction will be aborted and the invoice record 
> deleted from the table.
>
> Can i use after_insert for this or is it better to use the database's 
> transaction capabilities through db.executesql?
>
> Regards
> Johann 
>
>
>
> -- 
> Because experiencing your loyal love is better than life itself, 
> my lips will praise you.  (Psalm 63:3)
>  

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to