DB 적중 횟수를 줄이기 위해 Sqlalchemy를 사용하여 select 문을 동적으로 작성하기 위해이 루프를 작성했습니다.
를 query.all()
호출 할 때 최대 재귀 깊이 초과 오류가 발생하는 이유를 이해할 수 없습니다 .
재귀 깊이 최대를 2000으로 변경하면이 쿼리가 제대로 작동합니다.
암호:
filter_cond = False
for asset in assets:
filter_cond = or_(filter_cond, and_(model.version == asset.get("version"),
model.id == asset.get("id"),
model.account_id == account_id))
query = session.query(model).filter(filter_cond)
result_set = query.all()
현재 for 루프에서 다음 중첩 논리 조건을 재귀 적으로 구축하고 있습니다.
or(...or(or(false, condition1), condition2), ... conditionN)
대신 동등한 조건을 표현하면 :
or(condition1, condition2, ... conditionN)
목록 이해 및 압축 해제를 사용하면 재귀를 피할 수 있습니다.
def condition(model, asset):
return and_(model.version == asset.get("version"),
model.id == asset.get("id"),
model.account_id == account_id)
filter_cond = or_(*[condition(model, asset) for asset in assets])
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다