我試圖執行一個查詢,該查詢可以在bmarks和帶有bmarks_tags輔助表的標記之間進行多對多關係。該查詢涉及幾個子查詢,我需要DISTINCT一列。我後來想通過DISTINCT'd ID將它加入到另一個表中。sqlalchemy:在過濾器或子句元素中引用label()'d列
我已經試過了幾個方法,這似乎最接近:
tagid = alias(Tag.tid.distinct())
test = select([bmarks_tags.c.bmark_id],
from_obj=[bmarks_tags.join(DBSession.query(tagid.label('tagid'))),
bmarks_tags.c.tag_id == tagid])
return DBSession.execute(qry)
但我得到一個錯誤:
⇝ AttributeError: '_UnaryExpression' object has no attribute 'named_with_column'
有誰知道我怎麼能進行跨bmarks_tags的加入。 tag_id和Tag.tid.distinct()的結果?
感謝
模式:
# this is the secondary table that ties bmarks to tags
bmarks_tags = Table('bmark_tags', Base.metadata,
Column('bmark_id', Integer, ForeignKey('bmarks.bid'), primary_key=True),
Column('tag_id', Integer, ForeignKey('tags.tid'), primary_key=True)
)
class Tag(Base):
"""Bookmarks can have many many tags"""
__tablename__ = "tags"
tid = Column(Integer, autoincrement=True, primary_key=True)
name = Column(Unicode(255), unique=True)
請張貼您的架構,以便我們可以重現它。 – letitbee 2011-05-07 09:28:00
SELECT表達式看起來相當混亂。你有實際的SQL嗎? – sayap 2011-05-10 07:48:12