使用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
相关产品推荐
相关产品推荐

