2013-02-07 5 views
2

SQLAlchemy에서 REGEXP_LIKE를 사용할 수있는 방법을 아는 사람이 있습니까? 예를 들어 다음과 같이 할 수 있습니다.SQLAlchemy의 REGEXP_LIKE

sa.Session.query(sa.Table).filter(sa.Table.field.like(regex-to match)) 

도움 주셔서 감사합니다.

답변

3

그것은 (I 오라클에 액세스 할 수 없음) 다음과 같이 작동합니다 : 경우에

sa.Session.query(sa.Table) \ 
      .filter(sa.func.REGEXP_LIKE(sa.Table.c.column, '[[:digit:]]')) 
+0

FUNC를 우리는 따라서 임의의 연산자를 사용할 수 있습니다 REGEXP_LIKE라는 속성이 없습니다. .column의 의미는 무엇입니까? 이것은 현장이 될 것인가? 나는 .field와 .field.column을 시도했지만 둘 다 작동하지 않습니다. –

+0

어떤 데이터베이스를 사용하고 있습니까? – plaes

+0

PostgreSql ...하지만 db에서 독립적 인 sqlAlchemy가 아니 었나요? –

1

당신이 문자 필터를 사용할 수 있습니다 SQLAlchemy의에서 지원하지 않는 데이터베이스 특정 기능을 수행해야 할 때. 그래서 당신은 여전히 ​​당신을 위해 쿼리를 작성하는 SQLAlchemy의를 사용할 수 있습니다 - 즉, 등 조인에 대해 조심

다음

예는 PostgreSQL의 정규식 매칭 연산자 ~

session.query(sa.Table).filter("%s ~':regex_pattern'" % sa.Table.c.column.name).params(regex_pattern='stack') 

과 함께 문자 필터를 넣어 또는 수동으로 지정할 수있는 방법입니다 문자 스트링의 일부로서 테이블 항목이 완전히 휴대용 아니지만, 여기 ~ 연산자를 사용하여 포스트 그레스 용액이다 ambigious 열 이름 케이스를

session.query(sa.Table).filter("table.column ~':regex_pattern'" ).params(regex_pattern='[123]') 
+0

실례지만 당신의 답은 regex_pattern에 오류를 제공합니다. 괄호가 올바른 방법으로 삽입되어 있습니까? table.column이 맞습니까? 그게 sa가 아니야. Table.column? 어떤 경우에도 이런 식으로도 오류가 발생하지만 오류가 무엇인지 알 수 없으므로 "ProgrammingError"또는 "1"근처의 구문 오류 만 나타납니다 –

+0

오타로 인해 미안합니다. regex_pattern 뒤에는 괄호가 없어야합니다. 업데이트 버전을 참조하십시오. 또한''sa.Table ''유형에 따라 열을 가져 오는 다른 방법이 있습니다. 그것이''Table (..)''이라면 사용자는''sa.Table.c.column.name''입니다. 매핑 된 객체이고 그냥''sa.Table.column.name'' 인 경우 – vvladymyrov

+0

죄송합니다. 이해가 안됩니다. 내 검색어입니다. sa.Session.query (sa.BaseApparati) .filter ("sa . ("regex_pattern = '[123]'). all(). 테이블의 이름은 "BaseApparati"이고 열의 이름은 "nome"입니다. 올바른 타이핑은 무엇입니까? 나는 여전히 "Programming Error ..."를 얻는다. 감사합니다 –

0

을 방지한다. 이것은 또한 ORM와 함께 작동

sa.Session.query(sa.Table).filter(sa.Table.field.op('~', 0, True)(regex-to match))

가 구축, 0의 기본 우선 순위를 가정,

sa.Session.query(sa.Table).filter(sa.Table.field.op('~', is_comparison=True)(regex-to match))

을 또는 :

sa.Session.query(SomeClass).filter(SomeClass.field.op('~', 0, True)(regex-to match))