我正在研究SQLAlchemy 0.9.8
此问题与“如何通过SqlAlchemy中的joinloaded表进行筛选?
”有关,但并不相同。
我有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
列表ArticleL10n
。
我试过了:
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
:
.outerjoin(ArticleL10n, and_(Article.l10n, ArticleL10n.lang == "en"))
问题内容: SQLAlchemy支持渴望加载关系,这基本上是一条语句。但是,如果模型具有两个或多个关系,则可能是非常庞大的联接。例如, 该查询的性能实在是太差了,因为中和会产生一个巨大的表。但是和在这里没有关系,因此它们不应该是。它应该是两个分开的查询。并且由于会话具有某种程度的缓存,因此我将查询更改为此。 这次的性能要好得多。但是,我不认为这样做是正确的。我不确定会话结束时标签缓存是否会过期。
我有以下三个表格: 帖子 帖子: 评论: 标签: Post表有许多注释,comments表有许多与之关联的标记。 如何使用“快速加载”将所有这些表组合在一起? 比如: 但是这个查询总是在标记关系中返回空响应。 我做错了什么? 期望的结果是这样的: 你可以看到帖子里面包含评论,评论里面也包含标签关系。 另外,我在我的项目中使用了“jenssegers/laravel mongodb”包,我试图在没有
我正在使用教义2来绘制学术时间表。以下是对这些关系的简化观察: 一个类有事件(一对多) 事件具有类型(多对一) 一个事件有一个位置(多对一) 使用
拉威尔说: 我需要的是这样的东西 我们可以在一个关系中加载多个关系。 这有可能吗?
问题内容: 好吧,我对此完全感到困惑。我正在尝试构建按类别组织的已发布网页菜单。 Category.rb: Page.rb Page模型还具有:is_published,因此我也尝试对其进行过滤。我不愿意发布我微不足道的查询尝试,但是除了乞求更聪明的人之外,没有其他解决方案: (自己是@current_website) 这大部分返回我需要的内容,但没有返回未发布页面的父类别。例如,如果我有以下方法
我有一个问题,就是基于hasMany关系从数据库中获取数据并将其发送到Larave中的api。在下面的代码中,Laravel没有给我客户id=$id的产品。我不知道为什么,我不能在$query旁边发送$id。如果我把号码写在“我有很好的安全套,但我需要自动拿。 所有api代码 先谢谢你。
问题内容: 我相信只有两种使用Hibernate加载对象的方法,即延迟加载和一种渴望加载。延迟加载有其自身的优势,它不会加载很多对象,而只是在需要时才加载它们。我还了解到,如果您想强制为一个对象加载所有子代,则只需调用即可。假设我们有以下对象 假设我们有一些客户在我们的系统中有订单,并且该订单可能不止一个甚至为空。所以我的问题是,在这种情况下始终使用渴望加载会更好吗?我们需要与客户相关的订单的大小
问题内容: EJB似乎是延迟加载的-每当访问时。 但是,我想热切地初始化它们-即每当容器启动时。如何实现的(特别是在JBoss中) 该主题提供了一些提示,但并不令人满意。 问题答案: 从EJB 3.1开始,可以将模块启动和停止通知单例bean: 在EJB 3.1之前,没有标准的纯EJB解决方案。我建议将WAR添加到您的EAR并使用servlet-context-listener。