【问题标题】:How to write postgre query in django?如何在 django 中编写 postgre 查询?
【发布时间】:2021-02-23 03:00:37
【问题描述】:

我正在尝试获取具有多种技能的用户 ID。下面是给我正确结果的 postgre 查询,我在 Django 中实现相同的结果时被卡住了。

SELECT "Extractor_usr_skills"."user_id"
FROM "Extractor_usr_skills" WHERE "Extractor_usr_skills"."skill_id" 
IN (356, 360) GROUP BY "Extractor_usr_skills"."user_id" HAVING COUNT("Extractor_usr_skills"."user_id") = 2

我可以通过关注 (Django queryset - column IN() GROUP BY HAVING COUNT DISTINCT ) 来做到这一点。我们有更好的解决方案吗?

class Usr_Details(models.Model):
    name = models.CharField(max_length=255, blank=True)
    phone_number = PhoneNumberField(blank=True)
    email = models.EmailField(max_length=254, blank=True)
    exp = models.FloatField(max_length=9, blank=True)
    education = models.CharField(max_length=110, blank=True)
    college = models.CharField(max_length=255, blank=True)
    currentEmployer = models.CharField(max_length=255, blank=True)
    gender = models.CharField(max_length=6, blank=True)


class Skills(models.Model):
    skill = models.CharField(max_length=100, blank=True)


class Usr_Skills(models.Model):
    user = models.ForeignKey('Usr_Details', on_delete=models.CASCADE)
    skill = models.ForeignKey('Skills', on_delete=models.CASCADE)

【问题讨论】:

  • 显示您的相关模型
  • @ArakkalAbu 我已经用模型编辑了问题
  • 嘿,Django 有 ORM Documation Link

标签: python-3.x django postgresql django-queryset


【解决方案1】:

你可以试试这个方法:

from django.db.models import Count

result = Usr_Skills.objects.values('user')\
        .annotate(skill_count = Count('skill'))\
        .filter(skill_count__gt=1)\
        .values('user') # Or .values('user.id')

【讨论】:

    【解决方案2】:

    Django 有 ORM,尝试用它与你的数据库交互,它是安全的

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2013-12-26
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多