SQLAlchemy:mappers中的关系编译函数的结果而不是在查询关系时调用函数
-
08-07-2019 - |
题
我有许多映射器看起来像这样:
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()函数应该返回“en”。或“es”根据当前会议。
from pylons.i18n import get_lang
问题是SA编译了“locale”。与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)
请注意缺少的括号。现在应该在查询关系时对其进行评估。
不隶属于 StackOverflow