Python Django每天检索外键列表中每个项目的最新型号
我正在寻找最有效的方法来完成以下工作: 我有以下型号:Python Django每天检索外键列表中每个项目的最新型号,python,django,orm,Python,Django,Orm,我正在寻找最有效的方法来完成以下工作: 我有以下型号: class DataEntry(models.Model): signal_name = models.CharField(max_length=255)#FK to Signal.name without telling Django (or the database) the relationship (LONG STORY, OUT OF MY HANDS) timestamp = models.DateTimeFie
class DataEntry(models.Model):
signal_name = models.CharField(max_length=255)#FK to Signal.name without telling Django (or the database) the relationship (LONG STORY, OUT OF MY HANDS)
timestamp = models.DateTimeField()
value = models.FloatField()
我有一个信号名称(字符串)列表和一个日期列表。我需要为天数列表中的每一天检索信号列表中每个信号名称的最新数据条目。本质上
for signal in signal_list:
for day in day_list:
next_day = day + timedelta(days=1)
entry_list.append(DataEntry.objects
.filter(timestamp__lt=next_day)
.filter(signal_name=signal)
.order_by("-timestamp")[0])
这似乎会产生大量的数据库调用。有没有什么ORM技巧可以让我把这变成尽可能少的数据库调用?你所有的日子都是不同的还是连续的?它们都是独特的和连续的。我将在两周内每天都这样做,并将其移植到数月和数年……所有这些都将是连续的。您具体使用的是什么数据库?我担心这将需要特定于数据库的附加语法,Django ORM不够复杂,无法处理这些语法。。笨重的。我现在无法测试我的努力,但您基本上会对整个范围进行过滤(
filter(timestamp\uuuu range=(earlime\utimestap,latest\utimestamp))
然后只对日期部分进行分组,为每个日期列选择Max()
。这需要一个.extra()
调用仅提取每个时间戳的日期部分。