As noted in the documentation
<http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Legacy-databases-and-keyed-tables>,
the .update_record method is not available on rows of keyed tables, so you
will therefore also not be able to use the built-in .update_or_insert
method (which uses .update_record internally). Instead, you can write your
own function -- as you can see here
<https://github.com/web2py/pydal/blob/v16.06.28/pydal/objects.py#L792>,
it's a fairly simple function. Also, feel free to submit a Github issue
about this (link back to this discussion), as I don't think it would be
difficult to refactor .update_or_insert to accommodate keyed tables.
Anthony
On Monday, July 11, 2016 at 2:11:38 AM UTC-4, Ívar Ragnarsson wrote:
>
> Hi
> I'm new to Web2py and having some trouble with update_or_insert. Hope you
> guys can help me.
> The first time I run the update_or_insert function it correctly inserts
> the values into the table. (I'm using sqlite but also tried Postgresql).
> The next time I run it I get an Attribute:
> Traceback (most recent call last):
> File "C:\...\gluon\restricted.py", line 227, in restricted
> exec ccode in environment
> File "C:/.../applications/pant/controllers/test.py", line 6, in <module>
> File "C:\...\gluon\globals.py", line 417, in <lambda>
> self._caller = lambda f: f()
> File "C:/.../applications/pant/controllers/test.py", line 4, in index
> db.stillingar.update_or_insert( (db.stillingar.notandi==1)&(db.
> stillingar.stilling=='setting1'), notandi=1 , gildi="111", stilling=
> "setting1")
> File "C:\...\gluon\packages\dal\pydal\objects.py", line 786, in
> update_or_insert
> record.update_record(**values)
> File "C:\...\gluon\packages\dal\pydal\objects.py", line 90, in
> __getattr__
> raise AttributeError
> AttributeError
>
> My table definition is:
> db.define_table('stillingar',
> Field('notandi', type="integer", required=True),
> Field('stilling', type="text", required=True),
> Field('gildi', type="text"),
> primarykey=['notandi', 'stilling'],
> migrate=True)
>
> My controller is:
> # -*- coding: utf-8 -*-
>
> def index():
> db.stillingar.update_or_insert( (db.stillingar.notandi==1)&(db.
> stillingar.stilling=='setting1'), notandi=1 , gildi="111", stilling=
> "setting1")
> return dict()
>
> My view is basic.
>
> Can you guys tell me what I'm doing wrong?
>
>
>
>
--
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/d/optout.