从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实现相同逻辑,示例如下:
- 先定义和
[_btblCbStatement]表结构对齐的Model - 查询代码:
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
相关产品推荐
相关产品推荐

