我有一个Query
对象,它最初被配置为lazyload()
模型上的所有关系:
query = session.query(Article).options(lazyload('author'))
是否可以将关系加载恢复为默认值?E、 g.关系是用lazy='joined'
配置的,我希望查询具有joinedload()
行为,而不显式使用joinedload()
。在
我原以为^{
这样做的原因是,我正在创建一个基于JSON的查询语法,除非用户显式地命名关系,否则不应加载任何关系。在
目前,我在所有没有显式请求的关系上使用^{lazyload()
首先是所有关系,然后为其中一些关系重写它。在
这会使代码更加疏远。在
我想说清楚:
http://docs.sqlalchemy.org/en/latest/orm/loading.html
因此,我们讨论的是这样一种情况:一个关系被明确标记为急切加载,然后将查询配置为延迟加载,然后您希望“重写”它的原样。在
将调用链接到
options
将覆盖以前的调用。我做了一点测试。在但是,听起来好像您在谈论恢复
lazyload
选项,而上面的例子涉及到对立即加载的显式更改。在defaultload
docstring表示,它的用例将被链接到其他加载程序选项,因此我不认为这是相关的。在基于对源代码的浏览,我认为这种行为不受支持。当你更新加载策略选项时,它会用新的加载策略更新一个字典,我认为至少据我所知,仍然没有对旧策略的引用。在
您可以在
.options(lazyload(...))
之前保留对查询对象的引用,也可以选择生成查询,无论是否对所有内容进行延迟加载。在要强制所有内容延迟加载,忽略在关系上指定的内容,可以使用
'*'
目标。来自the docs:然后,可以为每个关系或关系链指定所需的任何负载类型。在
如果出于查询目的而加入关系,则可以在选项中使用}来使用已经联接的关系。在
^{pr2}$contains_eager
而不是{相关问题 更多 >
编程相关推荐