【问题标题】:Add Literal Percent Sign (%) to my calculation inside raw query Django在原始查询 Django 中将文字百分号 (%) 添加到我的计算中
【发布时间】:2019-08-24 14:55:37
【问题描述】:

在查询中添加百分比符号时出现错误:

异常类型:IndexError
异常值:元组索引超出范围。

views.py

class groupdatagercekzamanliveriListView(ListAPIView):
query2 = gercekzamanlıveri.objects.raw("""SELECT 1 as id,
CONCAT(ROUND((SUM(net_uretim_miktari)/SUM(teorik_uretim_miktari)::float*100)),'%') as tee, FROM tee_gercekzamanlıveri
INNER JOIN tee_isyerleri ON tee_gercekzamanlıveri.isyeri_id= tee_isyerleri.id
INNER JOIN tee_malzemeler ON tee_gercekzamanlıveri.malzeme_id= tee_malzemeler.id
INNER JOIN tee_isyerimalzemebilgileri ON tee_isyerimalzemebilgileri.isyeri_id= tee_gercekzamanlıveri.isyeri_id 
AND tee_isyerimalzemebilgileri .malzeme_id = tee_gercekzamanlıveri.malzeme_id) as a GROUP BY isyeri_id""")

    queryset = query2
    serializer_class = groupdatagercekzamanlıveriserializer

serializer.py

class groupdatagercekzamanlıveriserializer(serializers.Serializer):

    id = serializers.IntegerField()
    tee = serializers.CharField()

当我使用"a" 作为"%" 的字符串时没问题:

CONCAT(ROUND((SUM(net_uretim_miktari)/SUM(teorik_uretim_miktari)::float*100)),'a') as tee

结果: "tee": 80a

【问题讨论】:

  • 最好不要使用 Raw SQL 而是使用 Django ORM。
  • @Essex 应该不错,但我放了一些以便使查询易于理解。我用的是RAW查询,因为查询很全面。
  • 原始查询完全没问题,只要您知道自己在做什么(没有动态值)或者超出了 ORM 的能力。

标签: django postgresql django-rest-framework concat


【解决方案1】:

根据documentation(GIYF 第一次点击django sql "%" - 至少对我而言),您必须将其加倍才能将字符识别为文字,例如:

--
CONCAT(
  ROUND(
    (SUM(net_uretim_miktari) / SUM(teorik_uretim_miktari)::float * 100)
  ),
  '%%'
) as tee, FROM tee_gercekzamanlıveri
--

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多