You must do

db.tag_records.update_or_insert(condition,
                                tlast_right=time_last_right)

not condition can be an id

condition = id

can be a query

condition = (db.tag_records.name==auth.user_id)&(db.tag_records.tag==tag)

or it can be a dict of key:value

condition = {'name': auth.user_id, 'tag': tag}

If the first argument of update_or_insert is not specified the following 
named arguments (tlast_right=time_last_rightm,...) are used to build a 
condition dict.

On Sunday, 30 September 2012 20:59:41 UTC-5, monotasker wrote:
>
> In the manual section on update_or_insert() the examples only touch on a 
> situation where one field/value is given as the matching condition. I'm 
> wondering what syntax needs to be used if we want to match values on more 
> than one field. Extrapolating from the manual example, can I do this?
>   
> db.tag_records.update_or_insert(db.tag_records.name==auth.user_id, 
>                                 db.tag_records.tag==tag,
>                                 tlast_right=time_last_right)
>
> Or should I provide a dictionary of matching fields/values (using the 
> syntax that Massimo mentioned in a thread in July):
>    
> db.tag_records.update_or_insert({'name': auth.user_id, 'tag': tag},
>                                 tlast_right=time_last_right)
>
> I actually like the latter syntax better. It's more concise and (to my 
> mind) differentiates more clearly between the matching values and the 
> update values.
>
> I also wonder whether this kind of situation would be worth mentioning in 
> the manual section? Assuming it's possible, this makes update_or_insert 
> quite powerful.
>
> Ian
>

-- 



Reply via email to