python - 从 Django 查询中获取非唯一值

标签 python mysql django

我正在编写一个脚本,我想从访问过的网站中获取每次出现的值。

首先我访问了网站:

sd = SessionData.objects.filter(session_id__mlsession__platform__exact=int('2'))
result =  sd.values('last_page')

然后我得到我期望的值:

[{'last_page': 10L}, {'last_page': 4L}, {'last_page': 10L}]

这样,我希望以 10L 作为 id 的页面的权重是 4L 的两倍,因为它出现了两次。

我尝试从列表中获取值:

wordData = KeywordData.objects.filter(page_id__in=result)

但后来我只得到唯一的值:

[<KeywordData: 23>, <KeywordData: 24>, <KeywordData: 8>]

我想要的结果是:

[<KeywordData: 23>, <KeywordData: 24>, <KeywordData: 8>, <KeywordData: 23>, <KeywordData: 24>]

我设法不获得唯一列表的唯一方法是遍历 for 循环,但这并不是一个真正的选择,因为我正在处理的数据有数百万个条目。

django 中的“__in”过滤器是否只返回唯一条目?有没有办法让我以“django”方式获得正确的输出?

预先感谢您的帮助!

编辑:相关模型:

class KeywordData(models.Model):
    page = models.ForeignKey(Page, db_column='page_id', related_name='page_pageid', default=None)
    site = models.ForeignKey(Page, db_column='site_id', related_name='page_siteid', default=None)
    keywords = models.CharField(max_length=255, blank=True, null=True, default=None)

class MLSession(models.Model):
    session = models.ForeignKey(Session, null=True, db_column='session_id')
    platform = models.IntegerField(choices=PLATFORM_CHOICE)
    visitor_type = models.IntegerField(default=1)

class SessionData(models.Model):
    session = models.ForeignKey(Session, db_column='session_id', on_delete=models.CASCADE)
    site = models.ForeignKey(Site, db_column='site_id', db_index=True, default=None, null=True)
    last_page = models.ForeignKey(Page, db_column='last_page_id', default=None, null=True, related_name='session_last_page')
    first_page = models.ForeignKey(Page, db_column='first_page_id', default=None, null=True, related_name='session_first_page')

SessionPage 仅根据它们的 ID 引用,这些 ID 是自动递增的。

我想查看 session 的最后一页,因此只接受 last_page_id,并从相应页面获取关键字。如果同一页经常是最后一页,我想增加更多权重,如前所述。

如果需要更多信息,请告诉我,再次感谢!

最佳答案

Is the "__in" filter in django made to only return unique entries?

Django 中的 __in 过滤器直接映射到 SQL 中的 IN 条件,其行为正如您所观察到的那样。

如果您想要重复的行,您应该将查询重新构造为 SQL JOIN。你没有发布你的模型,所以我不得不在这里猜测,但下面的 Django 查询应该给你你想要的:

KeywordData.objects.filter(page__session_last_page__session_id__mlsession__platform=2)

关于python - 从 Django 查询中获取非唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45680108/

相关文章:

python - 上传形状奇怪的合身图像

python - 将数据附加到list时出错。

python - 将 csv 读入多个数据帧

mysql - 一个字段上的 WHERE 子句

c# - 无法加载文件或程序集 'MySql.Data, Version=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' 或其依赖项之一。

mysql - 存储过程,在 LIMIT 表达式中使用变量

python - Django 用户注册表最佳实践

python - 在 Django 管理中为每个项目显示图标

python - 如何使用 Django 和 Python 实现忘记密码功能

python - 如何将所有记录(按名称过滤)显示到表单中,Django