Ale*_*vić 3 python mysql django django-models
假设我想实现这个通用函数:
def do_exist(key:str, values:list[any], model: django.db.models.Model) -> bool
Run Code Online (Sandbox Code Playgroud)
它检查所有给定值是否存在于key单个查询中指定的给定模型的列中。我已经实现了这样的东西
from django.db.models import Exists
def do_exist(key, values, model):
chained_exists = (Exists(model.objects.filter(F(key)=value)) for value in values)
qs = model.objects.filter(*chained_exists).values("pk")[:1]
# Limit and values used for the sake of less payload
return len(qs) > 0
Run Code Online (Sandbox Code Playgroud)
它生成一个非常有效的 SQL 查询,但让我害怕的是,如果我尝试将评估方法调用附加到qslike.first()而不是[:1]或.exists()MYSQL 连接会丢失。有谁有更优雅的方法来解决这个问题?
如果您知道您正在传递Npks,那么count()由这些 pks 过滤的查询应该具有准确的N结果。
def do_exist(model, pks):
return model.objects.filter(pk__in=pks).count() == len(pks)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4637 次 |
| 最近记录: |