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.