Good point, but I put the commits after the function returns as there are a 
number of inserts in a variety of tables. So is it preferred to do a commit 
after every insert instead of grouping them together for one big commit?
TIA Ben

On Friday, September 1, 2017 at 12:35:01 AM UTC-7, Val K wrote:
>
> from the book:
> Remember to call db.commit() at the end of every task if it involves 
> inserts/updates to the database. web2py commits by default at the end of a 
> successful action but the scheduler tasks are not actions.
>
> On Friday, September 1, 2017 at 8:30:00 AM UTC+3, Ben Lawrence wrote:
>>
>> Thanks guys for your time. No I do not know what a _before_insert hook 
>> is, so I doubt that there is one here.
>>
>> here is
>>
>> ################################################################################
>>
>> def insert_company(valid_name, valid_email):
>>     """ Inserts a company record if there is a new domain_tag
>>     """
>>     c_id = 0 # is the reference to the company record
>>     # what is the company domain ?
>>     email_tup = valid_email.split(u'@')
>>     if len(email_tup) > 1:  # it is an email address
>>         c_domain = email_tup[1]
>>     elif len(email_tup) == 1:
>>         c_domain = valid_email
>>     else: # give up
>>         c_domain = valid_name.upper()
>>     # use this to find the company, 
>>     c_rows = db(db.company.domain_tag == c_domain).select()
>>     if len(c_rows)==0:  # add the company
>>         c_id = db.company.update_or_insert(
>>             name = get_company_name(c_domain),
>>             e_mail = valid_email,
>>             domain_tag = c_domain )
>>     else:  # length MUST be one
>>         c_id = c_rows.last().id
>>     return c_id
>>
>> ################################################################################
>>
>> You know what,
>> I am running all this on ubuntu 16 in an LXD container with software raid 
>> on the metal. I am really starting to wonder if DAL and postgres and lxd 
>> and software raid are somehow getting ahead of themselves in timing? 
>> Perhaps there is no feedback or not enough feedback of "operation 
>> completed"  somewhere?
>>
>>  
>> On Wednesday, August 30, 2017 at 1:59:04 AM UTC-7, Val K wrote:
>>>
>>> As I see, it's a scheduler task -  show all code of insert_company
>>> Is there any _before_insert hook?
>>>
>>> On Wednesday, August 30, 2017 at 1:22:57 AM UTC+3, Ben Lawrence wrote:
>>>>
>>>> 2.15.3-stable+timestamp.2017.08.07.07.32.04
>>>> (Running on nginx/1.10.3, Python 2.7.12)
>>>>
>>>>
>>>> Hi
>>>> I hesitate to ask this because it will betray my stupidity
>>>>
>>>> I have this:
>>>>
>>>>     *c_rows = db(db.company.domain_tag == c_domain).select()*
>>>>     if *len(c_rows)==0*:  # add the company
>>>>         c_id = db.company.insert(
>>>>             name = get_company_name(c_domain),
>>>>             e_mail = valid_email,
>>>>             *domain_tag = c_domain )*
>>>>     else:  # length MUST be one
>>>>         c_id = c_rows.last().id
>>>>
>>>> and this the error:
>>>>
>>>> File "applications/remail/models/scheduler.py", line 120, in 
>>>> insert_company
>>>>     domain_tag = c_domain )
>>>>   File "/home/www-data/web2py/gluon/packages/dal/pydal/objects.py", 
>>>> line 734, in insert
>>>>     ret = self._db._adapter.insert(self, row.op_values())
>>>>   File 
>>>> "/home/www-data/web2py/gluon/packages/dal/pydal/adapters/base.py", line 
>>>> 486, in insert
>>>>     raise e
>>>> IntegrityError: duplicate key value violates unique constraint 
>>>> "company_domain_tag_key"
>>>> DETAIL:  Key (domain_tag)=(platronics.com) already exists.
>>>>
>>>>
>>>> Wha?! if domain_tag is already there would len(c_rows) > 0  and so 
>>>> would not try to insert the record?
>>>>
>>>>
>>>>

-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to