从python中的SQL查询分组结果以在页面上显示

时间:2013-06-26 15:06:58

标签: python sql-server django

我在views.py文件中运行SQL查询,根据返回的值,我需要在.html文件的列中显示不同的数据。

如果:

customer_id不为null,则详细信息列应显示customer_id和name。

如果:

customer_id为null,则详细信息列应显示部门名称和说明。

因此,数据库中有数字。一些分配给客户,一些分配给一个部门。该表的基本用途是显示数字列表及其分配的内容。

@render_to('customer/available_numbers.html')
def AvailableNumbers(request):
    cur = NumberList()

    sql = '''
        SELECT
            cpt.number,
            cpt.call_type,
            cpt.customer_id,
            cpt.profile_id
            c.name,
            pro.department_name,
            pro.description
        FROM customerphonetable AS cpt
        LEFT OUTER JOIN customer AS c
        ON (cpt.customer_id = c.customer_id)
        LEFT OUTER JOIN profile AS pro
        ON (cpt.profile_id = pro.profile_id)
        WHERE cpt.number IS NOT NULL
        '''

    cur.execute(sql)

    rows = [dictify(row) for row in cur]

    return dict(rows=rows, cnt=len(rows))

def dictify(row):
    return dict(zip([cd[0] for cd in row.cursor_description], row))

NumberList()连接到数据库。

html文件设置为显示如下数据:

{% block content %}
<table class ="table table-striped table-bordered">
    <thead>
        <tr>
            <th>Phone Number</th>
            <th>Call Type</th>
            <th>Detail</th>
        </tr>
    </thead>
    <tbody>
    {% for row in rows %}
        <tr>
            <td>{{ row.number }}</td>
            <td>{{ row.call_type }}</td>
            <td>{{ ???? }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>

我已经测试了SQL查询,它正在从数据库中提取正确的数据。我迷失了如何过滤结果并根据标准正确显示输出。

有什么建议吗?如果我遗漏任何信息,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

{% for row in rows %}
    <tr>
        <td>{{ row.number }}</td>
        <td>{{ row.call_type }}</td>
        {% if row.customer_id %}
            <td>{{ row.costumer_id }}</td>
        {% else %}
            <td>{{ row.department_name }}{{ row.description }}</td>
        {% endif %}
        <td>{{ ???? }}</td>
    </tr>
{% endfor %}

我不知道您使用的是什么框架或ORM(如果有的话),但您可以尝试使用其中的变体:

{% ifequal row.costumer_id NULL %}
{% ifequal row.costumer_id None %}
...

答案 1 :(得分:1)

感谢PepperoniPizza,这似乎成了诀窍:

{% for row in rows %}
        <tr>
            <td>{{ row.number }}</td>
            <td>{{ row.call_type }}</td>
            {% if row.customer_id == None %}
                <td>{{ row.department_name }}, {{ row.description }}</td>
            {% else %}
                <td>{{ row.customer_id }}, {{ row.name }}</td>
            {% endif %}
        </tr>
{% end for %}