Django:正确请求数据库以计算 DAU
Django: Correct request to database to calculate DAU
有人能在我对 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()
每次当我的游戏向我发送一些事件 like:level 完成、关卡失败等时,我都会在数据库中创建记录。为了识别哪个应用程序副本向我发送该副本具有唯一性的事件 app_id.所以问题是如何计算DAU。我向数据库发出下一个请求,但它 returns 错误的答案:
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')
如果我选择一天的日期范围 returns dau[0].count = 1200,
但是下一个计算唯一 app_id returns 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 似乎拼写错误。
另一点是您是否为时区等设置了正确的日期时间格式
有人能在我对 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()
每次当我的游戏向我发送一些事件 like:level 完成、关卡失败等时,我都会在数据库中创建记录。为了识别哪个应用程序副本向我发送该副本具有唯一性的事件 app_id.所以问题是如何计算DAU。我向数据库发出下一个请求,但它 returns 错误的答案:
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')
如果我选择一天的日期范围 returns dau[0].count = 1200, 但是下一个计算唯一 app_id returns 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 似乎拼写错误。
另一点是您是否为时区等设置了正确的日期时间格式