SQLALCHEMY : 매퍼의 관계는 관계가 쿼리 될 때 함수를 호출하는 대신 기능의 결과를 컴파일합니다.
-
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에 배치했으며 SO Get_lang () 함수는 현재 세션을 기반으로 "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 열매를 구현하는 방법이 있습니까? 이것은 나에게 생명의 은인이 될 것입니다!
해결책
클래스가로드되면 관계 문이 실행됩니다. 즉, 모든 기능 호출이 평가됩니다.
대신 함수를 전달해보십시오.
and_(photo_content_table.c.photoId == photo_table.c.id, photo_content_table.c.locale == get_lang)
누락 된 괄호를 기록하십시오. 관계가 쿼리 될 때마다 평가해야합니다.
제휴하지 않습니다 StackOverflow