python - 具有标量值的 Django 子查询

标签 python mysql django database

是否可以使用 Django ORM 将子查询结果与标量值进行比较?我很难转换它:

SELECT payment_subscription.*
FROM payment_subscription payment_subscription
  JOIN payment_recurrent payment_recurrent ON payment_subscription.id = payment_recurrent.subscription_id
WHERE
  payment_subscription.status = 1
  AND (SELECT expiration_date
       FROM payment_transaction payment_transaction
       WHERE payment_transaction.company_id = payment_subscription.company_id
             AND payment_transaction.status IN ('OK', 'Complete')
       ORDER BY payment_transaction.expiration_date DESC, payment_transaction.id DESC
       LIMIT 1) <= ?

要点是:

  1. 子查询标量值与任意参数的最后一次比较。
  2. 子查询和外部查询与公司 ID 之间的连接

最佳答案

Subscription.objects.annotate(
    max_expiraton_date=Max('transaction__expiration_date')
).filter(
    status=1,
    recurrent__isnull=False,  # [inner] join with recurrent
    transaction__status__in=['OK', 'Complete'],
    max_expiraton_date=date_value
)

这会生成其他 SQL 查询,但会获取相同的 Subscription 对象。

关于python - 具有标量值的 Django 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38022035/

相关文章:

php - 时间日志监控系统 PHP/MySQL

python - Python 3 和 MySQL 连接器的 Unicode 和参数数量错误

python - 在 __getitem__ 中从 None 引发 KeyError(key)

python - 将 csv 导入 Numpy datetime64

python - 如何在Python中加强算法来计算素数

python - 如何将一个图像垂直切割成两个大小相等的图像

mysql - NiFi 中的命名约定

python - 如何将 `str.format` 直接用作 `__repr__` ?

python - 相对导入超出顶级包错误

python - 在 Ajax 调用之后使用 Django 模板呈现 JSON 对象