SQLObjectでSELECT DISTINCT columnA FROM tableB
TurboGearsでデフォルトで使われている、O/RマッパーであるSQLObjectで、
表題のような、特定の列の値の一覧を取得する方法です。
直接SQL文を発行する、という手もあると思うのですが、distinctには対応していないように見受けられました。
ので、下記のようにしてみました。パフォーマンスは度外視です。
例では、tableBに対応するモデルクラスを tableBclsとしています。
set([tableBtmp.columA for tableBtmp in tableBcls.select()])
これを、たとえば 単一選択のコンポーネントであるSingleSelectFieldに突っ込む場合はこのようになります。
例では、値の順で昇順ソートしています。
SingleSelectField(name="tableB", label=u"tableBのcolumnA", options=sorted(set([tableBtmp.columA for tableBtmp in tableBcls.select()])))