代码之家  ›  专栏  ›  技术社区  ›  JPG

使用原始sql从表“Django”中选择不同的字段名称

  •  1
  • JPG  · 技术社区  · 6 年前

    我怎么跑 SELECT DISTINCT field_name from table; Django as中的SQL查询 raw sql ?

    当我尝试使用 Table.objects.raw("""SELECT DISTINCT field_name from table""") ,我有个例外

    2 回复  |  直到 6 年前
        1
  •  1
  •   bruno desthuilliers    6 年前

    如果您不需要模型实例(如果您只需要一个字段,那么模型实例是无用的),您也可以使用普通的db api游标:

    from django.db import connection
    cursor = connection.cursor()
    cursor.execute("select distinct field from table")
    for row in cursor:
        print(row[0])
    

    values values_list distinct() 也可以修改:

    queryset = YourModel.objects.values_list("field", flat=True).order_by("field").distinct()
    print(str(queryset.query))
    # > 'SELECT DISTINCT `table`.`field` FROM `table` ORDER BY `table`.`title` ASC'
    for title in queryset:
        print(title)
    

    注意:

    1/因为我们需要单个字段,所以我使用 flat=True 参数以避免获取元组列表

    2/我在字段上显式地设置排序,否则最终在模型的元中定义的默认排序也会强制排序字段成为te生成的查询的一部分。

        2
  •  0
  •   Danil    6 年前

    看来你得用些变通方法了

    select field_name, max(id)
    from table_name
    group by field_name;