django - 如何获取 Django 查询集中的列列表?
问题描述
我有一个代码,它使用大量注释等从不同的表创建多个复杂的查询集......
然后代码使用联合加入这些查询集。
每个查询集本身似乎都很好。呼叫print(len(qset))
对他们每个人都有效。
但之后combined_qset = qset1.union(qset2)
,我收到以下错误:
django.db.utils.ProgrammingError: each UNION query must have the
same number of columns
LINE 1: ..., '') AS "owner" FROM "t1") UNION (SELECT "field_x...
^
当我查看代码时,我计算.only(...)
和.values(...)
调用中的字段数,计算注释数等,似乎所有这些查询集都具有完全相同的列数。
错误消息只显示了生成的 SQL 的一小部分(见上文),因此它并没有真正的帮助。
有没有一种简单的方法来获取查询集的列列表,以便我可以找到差异并修复它?
解决方案
我知道了!
print('qset1:', len(qset1), qset1[0].__dict__.keys())
print('qset2:', len(qset2), qset2[0].__dict__.keys())
print('qset3:', len(qset2), qset3[0].__dict__.keys())
...
qset[0]
给出查询集的第一行qset
(仅当查询集至少有一行时才有效)
.__dict__
将该行转换为字典 - 键为列名,值为行元素的字典
.keys()
给出字典的键列表,因此,列
这将打印所有查询集的列列表。
推荐阅读
- sql - 使用 VBA 中的 Replace 函数更改带有维度字段的 SQL 代码
- html - 使用 api 响应渲染材质标签不起作用
- asp.net-core - 来自数据库的 ASP.NET Core ConfigurationProvider
- c++ - 如何使用 spdlog
- swift - 如何将 macOS 操场的输出重定向到文件
- c# - 如何序列化集合以使用 WCF 发送它?
- python - Pyspark [WinError 2]
- python - 背包问题的一种变体,其中一些物品必须包含但不计入目标
- c - 在 C 中对 long double 应用“not”运算符
- php - 在 PHP 中使用 GET 请求处理表单数据