2017-03-15 19 views
1

下面的查询对象:的方式来表示SQL查询,在Django/Python的

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'); 

我一直在寻找在Django类似的东西,或者至少蟒蛇。根据this discussion,在django模型中构建这个(可以理解)是没有问题的。在python/django有没有其他的选择?

+0

那么,Django ORM不适合您的需求? –

+0

是的,它没有。但我的问题是关于在python/django中生成SQL的任何方式, –

+0

是否要将Django ORM转换为原始SQL或将原始SQL转换为Django ORM? –

回答

0

似乎有成为这些选项:

(A)RawSQL与字符串模板,也许一些通用模型场反射代码,使其更有点普通。 (B)Django的Expression API这可能允许您重新使用一些Django ORM的东西,并只扩展它以使SELF JOINs工作。虽然我想知道为什么不会有一些Django模块了。也许这对用例来说太稀罕了。

+0

的原因,谢谢,但是'RawSQL'正是我想要远离的原因。拿出这个例子并不是很容易,但是当你遇到它时,真的很难不注意到_Django models_的限制。 _表达式API_的问题在于它不包含整个查询。 –