2011-01-17 2 views
0

Django 1.2.3에서는 순수 Django ORM 기능으로는 수행 할 수없는 쿼리를 수행해야합니다. 예 :Django : SQL 엔진에 따라 쿼리를 실행하십시오.

result = MyModel.objects.extra(select={'stddev': 'STDDEV_SAMP(value)'}).values() 

하지만 실제로이 코드는 여러 SQL 엔진 (sqllite, MySQL 및 MSSQL)에서 실행해야합니다. 따라서 settings.DATABASES['default']['engine']을 테스트하고 엔진 관련 코드를 실행해야합니다.

이 문제에 대한 더 장고와 유사한 접근법이 있습니까? (예 : Django가 기본 데이터베이스 엔진에 따라 실행되도록 사용자 정의 함수).

감사합니다.

답변

1

데이터에 액세스하기위한 코드를 저장하는 적절한 위치는 모델 계층의 메소드에 있습니다. 그런 식으로,이 모델은 수

  • 은 환경 인식
  • 구조의 정의는 쿼리
  • 사용 내장 이들은 주위 교환 최적화와 불통 될 수

ORM 기능없이 나머지 응용 프로그램은 조금만 변경해야합니다. 나머지 응용 프로그램은 모델을 통해서만 데이터를 조작하기 때문입니다.

+0

동의. 데이터베이스에서 UDF를 버리고 모델의 함수로 바꿉니다. –

+0

해당 코드는 이미 메소드에 있습니다 (인스턴스 값의 표준 편차를 제공). 내가 찾고있는 건 데이터베이스에 독립적 인 Django 집계 함수'Sum' 또는'Avg'와 같은 상위 항목입니다. – Don

+0

'settings.DATABASES [ 'default'] [ 'engine']'을 확인하는 것이 좋습니다. 다른 환경에서 다른 쿼리를 실행하려고하지만 데이터에 대한 인터페이스는 동일하게 유지됩니다. 구현에 다소 지저분한 일을하는 것이 좋으며 다른 환경에서 다른 코드를 실행하는 다른 방법을 생각할 수 없습니다 (환경을 확인하고 이에 따라 반응하는 것 외에는). –

관련 문제