2011-01-17 5 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のようなアプローチがありますか? (例えば、Djangoがデフォルトのデータベースエンジンに従ってそれらを実行するようにユーザが定義した関数)。

ありがとう

答えて

1

データにアクセスするためのコードを格納する適切な場所は、モデルレイヤのメソッドです。こうすることで、モデルができます。

  • は、環境意識する
  • 構築物のカスタムクエリ
  • 使用ビルトインこれらは、周りのスワップ最適化、および微調整することができ

ORM機能、なしアプリケーションの残りの部分は少し変更する必要があります。これは、アプリケーションの残りの部分がモデルを通じてデータを操作するだけなのでです。

+0

合意。 UDFをデータベースに投げ捨て、モデル上の関数に置き換えます。 –

+0

そのコードはすでに(インスタンスの値の標準偏差を与える)メソッドに入っています。私が探しているのは、データベースに依存しないDjango集計関数 'Sum'や' Avg'のようなものです。 – Don

+0

'settings.DATABASES ['default'] ['engine']'をチェックするのはいいと思います。異なる環境で異なるクエリを実行したいが、データへのインターフェイスは同じままです。実装に幾分面倒なことがあるのはうれしいことですが、環境を確認してそれに応じて別の環境で別のコードを実行する別の方法は考えられません。 –

関連する問題