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

使用SQL JOIN关联多表查询试算平衡表及cursor未定义报错求助

问题解决方案

1. 修复cursor未定义报错

报错的核心原因是你没有在代码中初始化数据库游标对象,Django 中执行原生 SQL 需按官方标准流程创建游标:

  • 先从django.db导入connection对象
  • 通过with connection.cursor() as cursor语法初始化游标,即可解决未定义报错

2. 修正多表关联SQL语句

完全可以通过 JOIN 实现三张表的关联查询,关联逻辑如下:

  • PostGL和Accounts通过共同的AccountLink字段关联
  • Accounts和GLAccountTypes通过共同的AccountType字段关联

注意你原始代码中的 SQL 存在语法错误:JOIN 顺序混乱、嵌套 SELECT 不符合语法规范,同时方括号是 SQL Server 的语法,如果你确实使用的是 MySQL,需要替换为反引号包裹字段/表名。

3. 完整修正后的代码

# 顶部先导入依赖
from django.db import connection
from django.shortcuts import render

def Kyletrb(request):
    # 以下为适配MySQL的关联SQL,需要SQL Server版本的话把反引号换成方括号即可
    # 如果需要按科目汇总借贷发生额(试算平衡表常规需求),可打开注释的SUM和GROUP BY语句
    trialBalance_sql = '''
    SELECT 
      a.`Account Number`,
      g.`Description`,
      -- SUM(p.`Debit`) as Debit,
      -- SUM(p.`Credit`) as Credit
      p.`Debit`,
      p.`Credit`
    FROM PostGL p
    INNER JOIN Accounts a ON p.AccountLink = a.AccountLink
    INNER JOIN GLAccountTypes g ON a.AccountType = g.AccountType
    -- GROUP BY a.`Account Number`, g.`Description`
    '''
    # 初始化游标解决未定义报错
    with connection.cursor() as cursor:
        cursor.execute(trialBalance_sql)
        # 注意不要只取tup[0],否则只会返回第一个字段,这里直接获取所有查询结果
        trialBalanceFinal = cursor.fetchall()

    return render(request , 'main/Kyletrb.html' , {'trialBalance' : trialBalanceFinal} )

前端Kyletrb.html中可直接遍历trialBalance变量,依次取出账号、类型描述、借方金额、贷方金额渲染即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:18:04