Hi, I "converted" the problematic row ( row = db(db.assets.asset_id == form.vars.id).update(asset_name = form.request_vars.asset_name_2) ) into normal SQL and used it on the database directly, works fine.
I made a static version of the same row ( row = db(db.assets.asset_id == 273).update(asset_name = 'testing3') ) and put it into an own function and works fine. But if I put the static row into my onaccept ( crud.settings.update_onaccept = update_assets) function I get the same error. I just wildly guessing but could be somekind of locking issue? Kenneth Den fredagen den 7:e december 2012 kl. 18:50:17 UTC+2 skrev Massimo Di Pierro: > > The error you are getting is a database error, not a web2py error, it says > you are trying to insert a record with a duplicate id. Perhaps the data is > already corrupted in db. > > On Friday, 7 December 2012 00:06:43 UTC-6, Kenneth wrote: >> >> Hi, >> >> this is a legacy table and asset_id is the id for the table. So it needs >> to be unique. The migration is false, web2py is not able to change the >> structure at all. >> >> I'm only trying to update the asset_name not create an new that looks the >> same. >> >> >> Kenneth >> >> >> Den fredagen den 7:e december 2012 kl. 04:10:24 UTC+2 skrev Massimo Di >> Pierro: >>> >>> I suspect your asset_id is declared as unique (or was declared as >>> unique, then you made a migration but db still thinks it is unique). >>> >>> On Thursday, 6 December 2012 17:37:10 UTC-6, Kenneth wrote: >>>> >>>> Hello, >>>> >>>> I have a form created by CRUD with some extra fields. assets_label >>>> field is a dropdown consisting of all old labels. Beside that I add an >>>> normal text field where user can enter a new label. >>>> I have then crud.settings.create_onaccept = insert_assets where I >>>> update the label name if there is some text in the textfield. This works >>>> great. >>>> >>>> The problem comes with crud.settings.update_onaccept = update_assets >>>> and >>>> def update_assets(form): >>>> if form.request_vars.asset_name_2 != '': >>>> row = db(db.assets.asset_id == form.vars.id).update(asset_name >>>> = form.request_vars.asset_name_2) >>>> >>>> I get an error ticket containg: >>>> <class '_mysql_exceptions.IntegrityError'> (1062, "Duplicate entry >>>> '275-2012-12-07 10:26:41' for key 'asset_id'") >>>> >>>> >>>> File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 166, in >>>> execute >>>> self.errorhandler(self, exc, value) >>>> File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in >>>> defaulterrorhandler >>>> raise errorclass, errorvalue >>>> IntegrityError: (1062, "Duplicate entry '275-2012-12-07 10:26:41' for key >>>> 'asset_id'") >>>> >>>> >>>> Any ideas what I'm doing wrong? >>>> >>>> >>>> Kenneth >>>> >>>> >>>> --