2016-08-19 2 views
1

sqlalchemy 버전 0.7.8을 사용하고 있습니다. 내 사용자가 일반 영어로 텍스트를 검색 할 수 있지만 db의 레코드는 텍스트 사이에 특수 문자를 가질 수있는 문제를 발견했습니다. 따라서 사용자가 ""을 병원에 일찍 와주십시오. "db에", 일찍 병원에 오십시오. ""내 질문은 병원에 일찍 와서 으로 보내주십시오.쿼리에서 sqlalchemy.sql 함수를 여러 번 사용

나는이 쉬운 해결책을 발견했다. 이와

needle = func.replace(func.replace(Message.text, ',', ''), '.', '') 
Message.query.filter(needle==query_term.strip()).one() 

그러나 문제는 같은 DB에서 많은 특수 문자가있을 수 있다는 것입니다 ";! &?"등 바늘 그래서 FUNC를 반복하지 않도록하기 위해 나에게 어떤 효율적인 솔루션을 제안 해주십시오 매우 비효율적 볼 것이다. 기능을 대체하십시오.

누군가가 이미 답변했는지 알고 싶다면 stackoverflow에서 같은 질문을 찾을 수 없습니다.

답변

1

답장을 보내 주셔서 감사합니다. 나는이 방법으로 그것을 향상시킬 수있다.

IGNORE_CHARS = [',', '.', '!', '&', ';', ':', '@'] 
needle = build_replace_func(IGNORE_CHARS, Message.text) 
record = Message.query.filter(needle == query_term.strip()).one() 

def build_replace_func(chars, attr, replace_with=''): 
    for character in chars: 
     attr = func.replace(attr, character, replace_with) 
    return attr 
0

당신은 변수의 문자열로 파이썬에서

>>> impore re 
>>> string = "please, come early# to [email protected] hospital" 
>>> cleanString = re.sub('\W+',' ', string) 
>>> print cleanString 
please come early to the hospital 

저장 텍스트를 모든 공간적 문자를 제거하고이 변수를 사용하여 쿼리를 실행하려면이 옵션을 사용할 수 있습니다.

관련 문제