【问题标题】:Show in a html template the result of a sql query using django在 html 模板中显示使用 django 的 sql 查询的结果
【发布时间】:2019-11-13 20:36:43
【问题描述】:

我想在模板中显示使用 django 和 mssql 的查询结果。

查询工作正常:

cursor.execute("SELECT DISP FROM INDTIMEN WHERE PAIS_SERV_PRODID = 'VEN_UY_POS' AND AÑO = 2019 AND MES = 10 AND INDIS != 0")
**lista**=cursor.fetchall()

在 de mssql 中查询的结果是 = 0.773

但是当我在 html 模板中写入变量 lista 时,浏览器显示 [(Decimal('0.773'), )]

我怎样才能只显示结果 0.773

【问题讨论】:

    标签: python sql django


    【解决方案1】:

    在您的 views.py 模板定义中,创建一个查询变量并像这样返回它:

    def your_template(request):
        cursor = connection.cursor()
        try:
            cursor.execute("SELECT DISP FROM INDTIMEN WHERE PAIS_SERV_PRODID = 'VEN_UY_POS' AND AÑO = 2019 AND MES = 10 AND INDIS != 0")
        finally:
            cursor.close()
        query = cursor.fetchall()
        return render(request, 'folder/template.html',{'query': query})
    

    在您的 template.html 文件中,使用 for 循环以将查询结果显示为 html:

        {% for obj in query %}
            <p>{{obj.0}}</p>
        {% endfor %}
    

    注意:如果您的查询只显示一个结果,您可以将代码更改为:

    def your_template(request):
        cursor = connection.cursor()
        try:
            cursor.execute("SELECT DISP FROM INDTIMEN WHERE PAIS_SERV_PRODID = 'VEN_UY_POS' AND AÑO = 2019 AND MES = 10 AND INDIS != 0")
        finally:
            cursor.close()
        query = cursor.fetchone()
        return render(request, 'folder/template.html',{'query': query})
    

    在您的 template.html 文件中,将查询结果显示为 html:

            <p>{{obj.0}}</p>
    

    【讨论】:

      【解决方案2】:

      Django cursor.fetchall() 返回一个元组列表。没有名称等。只有具有您要求的相同列的行。如文档中所述:

      https://docs.djangoproject.com/en/2.2/topics/db/sql/#executing-custom-sql-directly

      因此,在您的模板中,您需要迭代所有行并为每一行显示元组中的第一项。这会给你“DISP”。在这个例子中,我假设你的视图已经传递了一个名为 lista 的上下文变量,它保存了你的 fetchall() 的结果:

      <ol>    
        {% for row in lista %}
          <li>{{ row.0 }}</li>
        {% endfor %}
      </ol>
      

      这会将您的结果显示为页面上的有序列表。

      【讨论】:

        【解决方案3】:

        cursor.fetchall() 返回[(Decimal('0.773'), )] 的原因是因为您的查询可能有多个行/列;它会使用元组来管理行和列。

        这里,你的查询只有一行一列,所以你可以使用:

        lista = cursor.fetchall()[0][0]
        

        【讨论】:

          【解决方案4】:

          由于fetch_all 返回一个列表,您需要通过 lista[0] 访问列表的第一个位置,或者改为调用fetch_one。

          【讨论】:

            猜你喜欢
            • 2021-11-17
            • 2016-03-16
            • 2014-08-24
            • 2014-04-26
            • 1970-01-01
            • 2018-09-16
            • 1970-01-01
            • 2017-05-16
            • 1970-01-01
            相关资源
            最近更新 更多