SQLALCHEMY : 매퍼의 관계는 관계가 쿼리 될 때 함수를 호출하는 대신 기능의 결과를 컴파일합니다.

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에 배치했으며 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)

누락 된 괄호를 기록하십시오. 관계가 쿼리 될 때마다 평가해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top