我有一个包含VM分析数据的表,每次输入数据时都会插入一个时间戳。每小时输入一次数据,并在30天标记处截断。我需要编写一个Django查询,根据客户发布的整数来搜索给定的天数。
因此,客户提交数字7,Django查询返回最近7天的数据。我正在查看有关日期的文档,但它似乎不会做我想要的。
我真的只需要一些帮助,在哪里看,或者甚至可以用Django。
这是我目前的查询:
vms = VmStatHistories.objects.filter(customer_id = customer_id).order_by('vm_id').distinct('vm_id').filter(datetime = datetime.datetime.today()-datetime.timedelta(days=number_of_days))
模型字段:
class VmStatHistories(models.Model):
vm_stat_id = models.AutoField(primary_key=True, editable=False)
vm_id = models.BigIntegerField()
customer = models.ForeignKey(Customers)
vm_name = models.CharField(max_length=4000)
read_request = models.DecimalField(max_digits=15, decimal_places=2)
write_request = models.DecimalField(max_digits=15, decimal_places=2)
cpu_usage_ghz = models.DecimalField(max_digits=15, decimal_places=2)
memory_consumed_mb = models.DecimalField(max_digits=15, decimal_places=2)
memory_active_mb = models.DecimalField(max_digits=15, decimal_places=2)
memory_swap_mb = models.DecimalField(max_digits=15, decimal_places=2)
bytes_sent_kbps = models.DecimalField(max_digits=15, decimal_places=2)
bytes_received_kbps = models.DecimalField(max_digits=15, decimal_places=2)
disk_usage_mbps = models.DecimalField(max_digits=15, decimal_places=2)
ip_address = models.CharField(max_length=16)
provisioned_ram_gb = models.BigIntegerField()
provisioned_cores = models.BigIntegerField()
provisioned_storage_gb = models.BigIntegerField()
consumed_storage_gb = models.BigIntegerField()
datetime = models.DateTimeField()
class Meta:
managed = True
db_table = 'vm_stat_histories'
def __unicode__(self): # Python 3: def __str__(self):
return self.vm_name
答案 0 :(得分:2)
您的基本查询几乎是正确的。只需在datetime__gte=datetime.datetime.today() -datetime.timedelta(days=number_of_days)
来电中使用filter
,而不是datetime=...
。如上所述,您要求的数据时间恰好在指定的天数之前加上时间戳,而不是直到现在为止的数据。