[Python][SQLAlchemy] many-to-manyに対するクエリ

単純に以下のように書くとちょっと困るときがある。

people = session.query(Person).select_by(label_person.c.label_id==label_id)
people = session.query(Person).select_by(label_id=label_id) # ショートカット

ここでは、personテーブルとlabelテーブルがn:m関連で、ブリッジテーブルとしてlabel_personがある。
personテーブルはPersonクラスにマップし、labelをリストアトリビュートとしている。
このとき、personとして、{"name":"aodag", "labels":[1, 2]}のようになっていて、上記のように取得する。(例えばlabel_id=1として取得)
すると、取得できたPersonオブジェクトのlabels属性は "labels":[1] のようになって、条件外のラベルが取得できない。
最終的なSQLでlabelテーブルに関する条件としてlabel_id = 1となるわけだから、そうなってしまうのもうなずけるが。
でも、期待した結果じゃないのは事実。
ちゃんとlabelsアトリビュートを全部とってきてほしいな。

というわけで、対応策

p = select([label_person_table.c.person_id], label_person_table.c.label_id==label_id)
people = session.query(Person).select_by(Person.c.person_id.in_(p))

label_personテーブルから、条件にあうpersonのidを引っこ抜いてから、そのidで検索する。
pはselectクエリを抽象化していて、最終的には一回のクエリでまとめて実行される。
ちょっとスマートさに欠けるかな。