2010-08-12 3 views
4

저는 triyng로 postgresql과 django로 전체 텍스트 검색을합니다. 그래서 클라이언트 목록을 반환하는 search_client(text) 함수를 만들었습니다. DB에서 호출하려면 다음과 같이 사용하십시오.Django에서 데이터베이스 함수를 호출하는 적절한 방법은 무엇입니까?

SELECT * FROM search_client('something') 

그리고 나는 django에서 호출하는 방법을 잘 모르겠습니다. 나는

cursor = connection.cursor() 
cursor.execute("SELECT * FROM search_client('something')") 
result = cursor.fetchall() 

처럼 뭔가를 할 수 있지만, 단지 값의 목록을 반환합니다 알고, 나는 방법 "() 필터"를 사용할 때처럼 개체의 목록을 가지고 싶습니다.

어떤 아이디어 ?? 시간 내 줘서 고마워!

답변

2

장고 1.2를 사용하는 경우 raw() ORM method을 사용하여 사용자 지정 SQL을 실행할 수 있지만 장고 모델을 가져올 수 있습니다. 그렇지 않다면 디폴트 QuerySet의 extra() 메소드를 통해 SQL을 실행하고 커스텀 메소드로 펌핑하여 실제 ORM 레코드를 가져 오거나 새로운 임시 객체를 생성 할 수 있습니다

+0

고마워, 내가 여분의() 원인 '나는 django 1.1을 사용하고 있습니다 – pleasedontbelong

0

먼저이 작업을 수행하지 않으실 것입니다. 데이터베이스 기능이 인데 실제로이라는 증거가 있습니까?

먼저 파이썬으로 구현하십시오. 파이썬 구현이 실제로 트랜잭션에서 가장 느린 부분임을 입증 할 수 있다면 스토어드 프로 시저를 시도 할 수있다.

둘째, Django에서 extra 메서드를 사용할 수 있습니다.

http://docs.djangoproject.com/en/1.2/ref/models/querysets/#django.db.models.QuerySet.extra

주 연산 집약적 데이터베이스 절차는 종종 느린 것을.

+1

데이터베이스 기능은 속도를하지 않습니다. 전체 텍스트 검색은 함수에 대한 좋은 후보이며, 최적화를 좀 더 쉽게 만들며, 데이터베이스 내에서 수행 할 수 있습니다. –

+1

글쎄, 정말 빨리 할 것이라고 생각하기 때문에 나는 그것을하고 있지 않다. 함수 안에는 다른 5 개의 테이블, 루프 등의 조인을 포함하여 많은 일을하기 때문에 함수를 만들었다. 파이썬으로 해보려한다면 나에게 악몽이 될 수있는 일들. Thxs – pleasedontbelong

+0

@pleasedontbelong : "다른 5 개의 테이블에 조인 포함"- 장고는 사소한 일. "루프 등." - 파이썬에서 사소한 일. 종종 데이터베이스에서보다 빠릅니다. "파이썬으로 해보려한다면 나에게 악몽이 될 수있는 일들"- 전혀 이해할 수 없다. –

3

귀하의 목표가 완전한 기능을 갖춘 검색 엔진 인 경우 django-haystack을보십시오. 그것은 흔들린다. 귀하의 질문에 관해서는

, 새로운 (장고 1.2) raw 방법 일 수 있습니다

qs = MyModel.objects.raw("SELECT * FROM search_client('something')") 
관련 문제