Thanks Massimo. That's very clear now, and I do like the syntax (very
"pythonic"). I think an example like this would make a helpful addition to
the book.
Ian
On Monday, October 1, 2012 12:04:21 AM UTC-4, Massimo Di Pierro wrote:
>
> 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
>>
>
--