2017-12-01 18 views
0

I는 같은 질의를 필터링 할 해요 any() method :SQLAlchemy를 사용하여, 연관 개체 속성과 Regex로 필터링하는 방법? 사용

이 연관 오브젝트 ResultImages 의해 정의되는 Image 객체와 관계를 갖는 Result 클래스와 관련된 이미지를 필터링한다
session.query(Result).filter(Result.related_images.any(url='result1_1512149119.jpg')) 

이러한 session.query(Result.related_images).all()Result 항목과 관련된 것으로 지정된 모든 이미지를 반환합니다. 위의 첫 번째 쿼리를 만드는

, 나는 다음과 같은 출력을 얻을 :

session.query(Result).filter(Result.related_images.any(url='result2_1512149119.jpg')) 

것 : 내 데이터베이스에서

result1_1512149091.jpg 
result1_1512149094.jpg 
result1_1512149097.jpg 
result1_1512149100.jpg 
result1_1512149103.jpg 
result1_1512149105.jpg 
result1_1512149109.jpg 
result1_1512149111.jpg 
result1_1512149113.jpg 
result1_1512149117.jpg 
result1_1512149119.jpg 
result1_1512149122.jpg 
result1_1512149125.jpg 
result1_1512149128.jpg 

을, 그런 다음 쿼리 많은 결과 많은 이미지가있다 다음 데이터를 반환하십시오.

result2_1512149091.jpg 
result2_1512149094.jpg 
result2_1512149097.jpg 
result2_1512149100.jpg 
result2_1512149103.jpg 
result2_1512149105.jpg 
result2_1512149109.jpg 
result2_1512149111.jpg 
result2_1512149113.jpg 
result2_1512149117.jpg 
result2_1512149119.jpg 
result2_1512149122.jpg 
result2_1512149125.jpg 
result2_1512149128.jpg 

과 관련된 설명서를 읽었습니다.기능을 제공하지만 더 뉘앙스가없는 방식으로 활용하는 방법 (또는 가능한 경우)에 대해서는 아직 명확하지 않습니다. 예를 들어, 내가 만들고있는 쿼리 유형의 경우 파일 이름의 부분 문자열 인 result1을 사전에 알고있을 것입니다.

result1_1512149091.jpg 하위 문자열로 필터링 된 쿼리가 result1_1512149094.jpg을 반환하는 이유를 알지 못합니다. 내 용도로 이상적이지만 왜 이런 방식으로 작동하는지 이해할 수 없습니다. 예를 들어 .any('result1') 필터링을 수행하면 result1 이미지의 전체 목록이 반환되지만 아무 것도 반환하지 않습니다.

나는 궁극적으로 무엇을하고 싶은지는 .any(url={{REGEX EXPRESSION}})과 같이 정규 표현식을 사용하여 연관 객체의 속성 값을 기준으로 필터링합니다. 이게 가능한가?

답변

1

내가 할 수있는 정규식 표현식을 사용하여 연결 개체의 특성 값을 기준으로 필터링하는 것이 궁극적으로하고 싶습니다. .any(url={{REGEX EXPRESSION}}). 이게 가능한가?

물론입니다. any()에 대한 모든 SQL 표현식을 기준으로 전달할 수 있습니다. 자신을 startswith(), contains(), like() 등을 사용하여 유사한 표현을 위해, 또는 무슨이 당신 :

session.query(Result).\ 
    filter(Result.related_images.any(
     Image.url.startswith('result1'))) 

정규 표현식을 사용하여 보통 비트 DB 고유의 것입니다, 당신은 귀하의 질문에 정보의 비트를 생략 한, 그래서 이 답변에서 그것을 피하려고했습니다. 그러나 LIKE 식과 같은 방식으로 사용합니다.

+0

감사합니다. '정규 표현식 (regex) '을 사용하는 것은 내가 가진 개념 일뿐입니다. 나는 당신의 접근 방식이 내가 성취하고자 한 바를 정확히 생각합니다. – theeastcoastwest