我正在研究SQLAlchemy 0.9.8
这个问题与“How to filter by joinloaded table in SqlAlchemy?”有关,但并不相同。你知道吗
我有Article
实体,它是由ArticleL10n
实体本地化的。你知道吗
Base = declarative_base()
class Article(Base):
__tablename__ = 'article'
id = Column(Integer, primary_key=True)
title = Column(String(255))
l10n = relationship("ArticleL10n",
collection_class=attribute_mapped_collection('lang'),
cascade="all, delete-orphan")
class ArticleL10n(Base):
__tablename__ = 'article_10n'
article_id = Column(Integer, ForeignKey('article.id'), primary_key=True)
lang = Column(String(15), primary_key=True)
title = Column(String(255))
我想查询特定语言的Article
列表。你知道吗
我试过:
session.query(Article) \
.outerjoin(Article.l10n) \
.options(contains_eager(Article.l10n)) \
.filter(ArticleL10n.lang == "en") \
.all()
这是行不通的,因为如果文章没有"en"
本地化,它就会被过滤掉。你知道吗
我目前的工作代码是:
session.query(Article) \
.outerjoin(ArticleL10n, and_(ArticleL10n.article_id == Article.id, ArticleL10n.lang == "en")) \
.options(contains_eager(Article.l10n)) \
.all()
这似乎管用。但我不喜欢这样,因为ArticleL10n.article_id == Article.id
部分看起来是多余的。我相信应该有更好的办法。你知道吗
我怎样才能简化这个?你知道吗
可以直接使用
relationship
而不是join
的第一部分的连接条件:相关问题 更多 >
编程相关推荐