2017-03-15 9 views
1

次のクエリ:ウェイ

SELECT L1.task_id FROM task_log L1 
    LEFT JOIN task_log L2 ON L1.started BETWEEN L2.started AND L2.ended 
    WHERE L2.task_id IS NULL; 

は、単純に他のタスクが実行していなかったときに開始されたすべてのタスクのログを読み込みます。 PHP/ZF2での抽象化は、次のようになります

$db->select(array('L1' => 'task_log')) 
    ->columns('task_id') 
    ->join(array('L2' => 'task_log'), "L1.started BETWEEN L2.started AND L2.ended", array(), 'left'); 

私はジャンゴで似たような、あるいは少なくともパイソンを探していました。 this discussionのように、これはdjangoのモデルでこれを構築するのは間違いです。 python/djangoに他の代替手段がありますか?文字列テンプレートと、おそらくいくつかの一般的なモデルフィールド反射コードで

(A)RawSQLが、それはもう少し汎用的にする:

+0

だから、Django ORMはあなたのニーズに合っていませんか? –

+0

はい、そうではありません。しかし、私の質問は、Python/djangoでSQLを生成する方法についてです –

+0

Django ORMを未加工SQLに変換するか、生SQLをDjango ORMに渡しますか? –

答えて

0

は、これらのオプションがあるように思われます。

(B)DjangoのExpression APIこれは、DjangoのORMの一部を再利用して、SELF JOINを機能させるためにのみ拡張することができます。なぜ私はいくつかのDjangoモジュールがないだろうと思っています。たぶんそれはユースケースのあまりにも稀です。

+0

ありがとうございますが、正確に 'RawSQL'は私が離れていたいものです。この例を思いつくのは簡単ではありませんでしたが、それに遭遇したときに_Djangoのモデルでその限界に気付かないのは本当に難しいです。 _expression API_の問題は、クエリ全体を含むようには設計されていないことです。 –

関連する問題