2.11.4. fiter_in と filter_out¶
フィルタに関しては コモンフィルタ を説明しましたが、 filter_in と filter_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'}>