gpt4 book ai didi

python - SQLAlchemy:映射器中的关系在查询关系时编译函数结果而不是调用函数

转载 作者:行者123 更新时间:2023-12-01 06:19:03 24 4
gpt4 key购买 nike

我有许多如下所示的映射器:

mapper(Photo,photo_table, properties = { "locale": relation(PhotoContent, uselist=False, primaryjoin=and_(photo_content_table.c.photoId == photo_table.c.id, photo_content_table.c.locale == get_lang()), foreign_keys=[photo_content_table.c.photoId, photo_content_table.c.locale])

我已部署在 Pylons 中,因此 get_lang() 函数应根据当前 session 返回“en”或“es”。

from pylons.i18n import get_lang

问题在于 SA 在编译时将“区域设置”关系与 get_lang() 返回的结果进行编译。所以如果我做这样的事情:

meta.Session.query(Photo).options(eagerload('locale')).get(id)

该关系不调用 get_lang()。它只使用编译时 get_lang() 的值。

有人知道如何实现动态的 SQLAlchemy eagerloader 吗?这对我来说将是一个救星!

最佳答案

关系语句在类加载时执行,这意味着每个函数调用都会被评估。

尝试传递函数:

and_(photo_content_table.c.photoId == photo_table.c.id, photo_content_table.c.locale == get_lang)

注意缺少的括号。现在只要查询关系就应该对其进行评估。

关于python - SQLAlchemy:映射器中的关系在查询关系时编译函数结果而不是调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1638751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com