python - Django:正确请求数据库以计算 DAU

标签 python mysql django django-queryset django-database

有人能在我对 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()

每次我的游戏向我发送一些事件时,我都会在数据库中创建记录,例如:关卡完成、关卡失败等。为了识别哪个应用程序副本向我发送事件,该副本具有唯一的 app_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, 但是下一个计算唯一 app_id 计数的请求返回 100:

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

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

最佳答案

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')   

似乎 distinct 拼写错误。

另一点是您是否对时区等进行了适当的日期时间格式化。

关于python - Django:正确请求数据库以计算 DAU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48342518/

相关文章:

sql - 如何编写此 MySQL 查询?

php - 使用 MySQL/PDO 时,表名是否应该以数据库名称和句点为前缀?

Django 'ImportError: cannot import name url'

python - 如何将 uuid 库与 mod_wsgi 一起使用?

python - 实例化对象自动添加到 SQLAlchemy session 。为什么?

python xml.etree.ElementTree 附加到子元素

mysql - 如何使用带有force选项的mysql source命令

python - 导入错误: No module named pkg_resources when running pip on Amazon EC2

python - 类型错误 : get_bind() got an unexpected keyword argument

python - 无法从网页中选择正确的 div