I use the pickled field to store a dictionary. Since dictionary
is not defined as a serializable type for the as_dict function,
it is not returned when calling to as_dict.
Adding it (dal.py line 6183) solved my problem, but I would
like to keep this change when I update my web2py next. Is
there a different way (without changing the dal) to achieve this?
Could you add it to the dal.py? Is it without risks?

Thanks,
Omri

On Thu, Jul 26, 2012 at 9:46 AM, Omri <omri...@gmail.com> wrote:

> So I tried it out, and it works great, except for one thing - when I try
> to use record.as_dict() to get
> the structure which I can return to a JSON-RPC call which I normally use
> to communicate with my
> client, it simply does not return the field.
> I tried to print it out and I see very clearly that as long as it is a Row
> object there is no problem, but
> as soon as I run .as_dict() it disappears.
> My definitions are as follows:
>
> from gluon.dal import SQLCustomType
> pickled = SQLCustomType(
>     type = 'text',
>     native = 'text',
>     encoder = (lambda x: pickle.dumps(x)),
>     decoder = (lambda x: pickle.loads(x))
> )
>
> then I use
> db.define_table("my_table",
>     Field("pickled_field", type=pickled)
> )
>
> but when I fetch the record it does not go to as_dict() (actually I use
> as_list() but both don't work).
>
> Any suggestions? Is there a way to teach as_dict to interpret this field
> type?
>
> Best wishes,
> Omri
>
>
> On Wed, Jul 25, 2012 at 9:20 PM, howesc <how...@umich.edu> wrote:
>
>> For what it is worth i have used custom fields for this type of thing
>> with great success!
>>
>>
>> On Tuesday, July 24, 2012 8:20:03 AM UTC-7, Anthony wrote:
>>>
>>> You could use a SQLCustomType field: http://web2py.com/**
>>> books/default/chapter/29/6#**Custom-Field-types-(**experimental)<http://web2py.com/books/default/chapter/29/6#Custom-Field-types-%28experimental%29>
>>> .
>>>
>>> Anthony
>>>
>>> On Tuesday, July 24, 2012 8:34:07 AM UTC-4, Omri Har-Shemesh wrote:
>>>>
>>>>
>>>> Hi web2pyers,
>>>>
>>>> very often, I have a field in the table which has to hold a complicated
>>>> value (most often numpy arrays). The way I implement it is that I use
>>>> "text" as the type of field, and then simply pickle.dumps(my_value) when
>>>> I save the field, and then pickle.loads(value_from_db) to access the
>>>> field
>>>> again.
>>>>
>>>> My suggestion is simple - create field that automatically pickles the
>>>> values
>>>> it gets and unpickles them on extraction. Is this already implemented?
>>>> Do you have other suggestions on how to implement this so that I won't
>>>> need
>>>> to pickle every time I access the table?
>>>>
>>>> Best wishes,
>>>> Omri
>>>>
>>>  --
>>
>>
>>
>>
>
>

-- 



Reply via email to