Date: 2006-02-21
Tags: zope

なぜZSQLMethodの返値はdict準拠じゃないのだろう

今日コードを書いていてZSQLMethodの返値がどんな型なのか気になった。

例えば、ZSQLMethodに値を渡す場合、キーワード引数にする必要があるので

kwargs = {
  'id': 10,
  'name': 'hoge',
  'age': 20,
}
zsqlmethod_update(**kwargs)

とか書くことが多い。さらに、取得したレコードの値を書き換えて書き戻すような場合、

records = zsqlmethod_select()

r = records[0]
# update record data here.
r['name'] = 'fuga'
r['age'] = 30

zsqlmethod_update(**r)

とやりたいところだけど、zsqlmethodの返値は辞書型じゃないのでこんな事は出来ない(キーワード引数に展開されない)。結局、

records = zsqlmethod_select()

r = records[0]
keys = records.names()
dict_r = dict(zip(keys,list(r)))

# update record data here.
dict_r['name'] = 'fuga'
dict_r['age'] = 30

zsqlmethod_update(**r)

こんなコードになってしまった。

こんなコードになってしまってから、返値の型が書かれている Zope-2.8.5/lib/python/Shared/DC/ZRDB/Results.py をぼーっと眺めていたら、 dictionaries とかいうMethodがある。なんだコレ使えばいいんだ‥‥。

dict準拠じゃないけどdictには変換できる。その心は‥‥返値がいきなりdict準拠だと書き換え可能だから‥‥かな?