You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从MSSQL导入数据到二维数组,实现Web应用试算平衡表逐行打印

问题修复方案

1. 输出格式异常修复

根因:pyodbc执行查询后fetchall()返回的是元组组成的列表,即使仅查询单个字段,每条结果也是(字段值,)格式的元组,直接渲染就会出现截图里的括号、引号格式问题。

修改后views.py代码

def home(request):
    desc = "SELECT Description FROM [Kyle].[dbo].[_btblCbStatement] WHERE Account <> ''"
    cursor = cnxn.cursor()
    cursor.execute(desc)
    # 提取元组中的第一个元素,得到纯字符串列表
    description = [row[0] for row in cursor.fetchall()]
    return render(request, 'main/home.html', {"description": description})

2. 模板结构优化

原模板循环内重复开启.row容器,且闭合位置错误,会导致排版异常,调整后代码如下:

{% extends "main/base.html"%}

{% block content%}
<h1>HOME</h1>
<div class="container">
  {% for desc in description %}
  <div class="row mb-3">
    <div class="col">
      <p>{{ desc }}</p>
    </div>
  </div>
  {% endfor %}   
</div>
{% endblock %}

3. Django filter与MSSQL查询对应关系说明

你提到的.filter是Django ORM的查询方法,和原生MSSQL的WHERE子句逻辑完全对应,如果你不想写原生SQL,配置好Django MSSQL后端后,可以用ORM实现相同逻辑,示例如下:

  1. 先定义和[_btblCbStatement]表结构对齐的Model
  2. 查询代码:
from .models import BtblCbStatement

def home(request):
    # filter(account__ne='') 直接对应MSSQL的WHERE Account <> ''条件
    description_list = BtblCbStatement.objects.filter(account__ne='').values_list('description', flat=True)
    return render(request, 'main/home.html', {"description": description_list})

values_list加flat=True参数可以直接得到字符串列表,不需要自己再循环提取元组值。

内容的提问来源于stack exchange,提问作者KyleStranger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:18:02