2.11.4. fiter_in と filter_out

フィルタに関しては コモンフィルタ を説明しましたが、 filter_infilter_out はフィールドに対するフィルタです。

filter_in はデータベース格納時に、filter_out はデータベースからの取り出し時にかかるフィルタです。 これらのフィルタは Field の属性値に定義をセットします。

次のようなテーブルがあるとします。

db.define_table('obj_data',
    Field('name'),
    Field('obj', 'text'),
    format='%(name)s')

このテーブルのobjフィールドにJSONデータを格納するとします。 その場合次のように、filter_in と filter_out のFieldクラス属性値を設定します。

>>> from simplejson import loads, dumps
>>> db.obj_data.obj.filter_in = lambda o, dumps=dumps: dumps(o)
>>> db.obj_data.obj.filter_out = lambda t, loads=loads: loads(t)

これによって、プログラムで余計なことを考える必要なく、フィールドからの格納と取り出し時に自動でJSONデータの変換を行ってくれます。

>>> data = ['abc','def',1,{2:3}]
>>> db.obj_data.insert(name='test', obj=data)
>>> print db.obj_data(1)
<Row {'obj': [u'abc', u'def', 1, {u'2': 3}], 'id': 1L, 'name': 'test'}>

参考: filter_in and filter_outfilter_in と filter_out