Django:正确请求数据库来计算DAU

2024-04-19 20:56:01 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能在我对Django数据库的请求中发现错误吗? 所以,我有下一个模型:

class GameEvent(models.Model):    
    game = models.ForeignKey(Game, blank=False, on_delete=models.CASCADE)    
    name = models.CharField(max_length=255, blank=False)
    app_id = models.CharField(max_length=255, blank=False)
    datetime = models.DateTimeField(blank=False)        
    def __str__(self):      
        return u"%s [ %s ]" % (self.game.title, self.name)

@receiver(models.signals.pre_save, sender=GameEvent)
def update_datetime(sender, instance, **kwargs):
    instance.datetime = datetime.datetime.now()

每次当我的游戏向我发送一些事件时,我都会在数据库中创建记录例如:级别完成,level failed etc.无法识别哪个应用程序副本向我发送了该副本具有唯一应用程序id的事件。因此问题是如何计算DAU。我向数据库发出下一个请求,但它返回错误答案:

dau = GameEvent.objects.filter(game = game, datetime__gte = date_start, datetime__lte = date_end)
           .extra({'date' :'date(datetime)'})
           .values('date')
           .annotate(count=Count('app_id', disntict=True))
           .order_by('date')   

如果我选择一天的日期范围,它将返回dau[0].count=1200, 但下一个计算唯一应用程序id计数的请求返回100:

app_ids = GameEvent.objects.filter(game = game, datetime__gte = date_start, datetime__lte = date_end)
           .values_list('app_id', flat=True).distinct() 

那么,错误在哪里呢? 谢谢你的帮助


Tags: nameselfidgame数据库falseapp应用程序
1条回答
网友
1楼 · 发布于 2024-04-19 20:56:01
dau = GameEvent.objects.filter(game = game, datetime__gte = date_start, datetime__lte = date_end)
           .extra({'date' :'date(datetime)'})
           .values('date')
           .annotate(count=Count('app_id', distinct=True))
           .order_by('date')   

似乎拼写错误。你知道吗

另一点是你是否为时区等做了正确的日期时间格式化

相关问题 更多 >