SQLAlchemy:mappers中的关系编译函数的结果而不是在查询关系时调用函数

StackOverflow https://stackoverflow.com/questions/1638751

  •  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)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top