Also, if i am inserting within a for loop, should I place the db.commit() within the for loop too?
On Friday, September 1, 2017 at 9:59:11 AM UTC-7, Ben Lawrence wrote: > > 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.