小编Enr*_*uig的帖子

如何在Django中使用额外条件离开外连接

我有这三个模型:

class Track(models.Model):
    title = models.TextField()
    artist = models.TextField()

class Tag(models.Model):
    name = models.CharField(max_length=50)

class TrackHasTag(models.Model):
    track = models.ForeignKey('Track', on_delete=models.CASCADE)
    tag = models.ForeignKey('Tag', on_delete=models.PROTECT)
Run Code Online (Sandbox Code Playgroud)

我想要检索所有未标记特定标记的曲目.这让我得到了我想要的东西:Track.objects.exclude(trackhastag__tag_id='1').only('id')但是当桌子增长时它会很慢.这是我在打印查询.query集时得到的:

SELECT "track"."id" 
FROM   "track" 
WHERE  NOT ( "track"."id" IN (SELECT U1."track_id" AS Col1 
                              FROM   "trackhastag" U1 
                              WHERE  U1."tag_id" = 1) )
Run Code Online (Sandbox Code Playgroud)

我希望Django发送此查询:

SELECT "track"."id" 
FROM   "track" 
       LEFT OUTER JOIN "trackhastag" 
                    ON "track"."id" = "trackhastag"."track_id" 
                       AND "trackhastag"."tag_id" = 1 
WHERE  "trackhastag"."id" IS NULL; 
Run Code Online (Sandbox Code Playgroud)

但还没有找到办法.使用原始查询实际上不是一个选项,因为我必须经常过滤生成的查询集.

我已经找到了干净的解决方法是在数据库中创建一个视图和模型TrackHasTagFoomanaged = False,我用它来查询,如:Track.objects.filter(trackhastagfoo__isnull=True) …

django django-models

11
推荐指数
1
解决办法
1650
查看次数

如何在clickhouse中分组后逐个元素地求和数组

我正在尝试在按另一列分组之后逐个元素地添加数组列元素。

有下表A:

id    units
 1    [1,1,1]
 2    [3,0,0]
 1    [5,3,7]
 3    [2,5,2]
 2    [3,2,6]
Run Code Online (Sandbox Code Playgroud)

我想查询如下内容:

select id, sum(units) from A group by id  
Run Code Online (Sandbox Code Playgroud)

并得到以下结果:

id    units
 1    [6,4,8]
 2    [6,2,6]
 3    [2,5,2]
Run Code Online (Sandbox Code Playgroud)

具有相同 id 的行中的单位数组逐个元素添加。

clickhouse

0
推荐指数
1
解决办法
1696
查看次数

标签 统计

clickhouse ×1

django ×1

django-models ×1