<p><code>Suit</code>的映射不存在,但基于推进查询,我假设它有一个<code>text_strings</code>属性。</p>
<p>SQLAlchemy文档中描述连接别名的相关部分位于:</p>
<p><a href="http://www.sqlalchemy.org/docs/orm/tutorial.html#using-aliases" rel="noreferrer">http://www.sqlalchemy.org/docs/orm/tutorial.html#using-aliases</a></p>
<p>函数的生成位于:</p>
<p><a href="http://www.sqlalchemy.org/docs/core/tutorial.html#functions" rel="noreferrer">http://www.sqlalchemy.org/docs/core/tutorial.html#functions</a></p>
<pre><code>cyts = aliased(TextString)
cits = aliased(TextString)
cots = aliased(TextString)
cy = aliased(Suit)
co = aliased(Suit)
session.query(
City.id,
(
cyts.text_string + \
'> ' + \
func.if_(cots.text_string!=None, cots.text_string + '> ', cits.text_string)
).label('city_breadcrumb')
).\
outerjoin((cits, City.text_strings)).\
outerjoin((cy, City.country)).\
outerjoin((cyts, cy.text_strings)).\
outerjoin((co, City.county))\
outerjoin((cots, co.text_string)).\
filter(cits.langauge=='en').\
filter(cyts.langauge=='en').\
filter(or_(cots.langauge=='en', cots.language==None))
</code></pre>
<p>不过,我觉得说起来简单得多:</p>
<pre><code>city.text_strings.text_string + " > " + city.country.text_strings.text_string + " > " city.county.text_strings.text_string
</code></pre>
<p>如果你在城市上加上一个描述符,就可以:</p>
<pre><code>class City(object):
# ...
@property
def text_string(self):
return self.text_strings.text_string
</code></pre>
<p>然后你可以说<code>city.text_string</code>。</p>