将 SQL 查询表示为 Django/Python 中的对象的方式

Way to represent SQL queries as objects in 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 中寻找类似的东西,或者至少 python。根据 this discussion,在 Django 模型中构建它(可以理解)是毫无疑问的。 python/django还有其他选择吗?

好像有这些选项:

(A) RawSQL 使用字符串模板和一些通用模型字段反射代码使其更通用。

(B) Django 的 Expression API 这可能允许您重新使用一些 Django ORM 的东西并且只扩展它以使 SELF JOIN 工作。虽然我想知道为什么已经没有一些 Django 模块了。也许它的用例太少了。

查找时我发现了这个:http://docs.sqlalchemy.org/en/latest/core/tutorial.html 这正是我需要的。