Python Django原始SQL查询-如何通过列(而不是元组索引)从SELECT查询中提取值
我正在Django(1.11)中使用Python Django原始SQL查询-如何通过列(而不是元组索引)从SELECT查询中提取值,python,django,postgresql,Python,Django,Postgresql,我正在Django(1.11)中使用PostgreSQL数据源执行fetchall()原始SQL查询。结果返回一个元组 我担心的是,我似乎只能通过元组索引获取行的字段,即行[2](或者在模板中,我会执行{{row.2})。但我希望能够使用实际字段名而不是索引,即行.itemno(或者在模板中,我将使用{{row.itemno}}) 我试着使用row.first\u name,但它说“list”对象没有属性“itemno” 是否可以在这个结果中使用字段名 下面是python shell中的一个示例
PostgreSQL
数据源执行fetchall()
原始SQL查询。结果返回一个元组
我担心的是,我似乎只能通过元组索引获取行的字段,即行[2]
(或者在模板中,我会执行{{row.2}
)。但我希望能够使用实际字段名而不是索引,即行.itemno
(或者在模板中,我将使用{{row.itemno}}
)
我试着使用row.first\u name,但它说“list”对象没有属性“itemno”
是否可以在这个结果中使用字段名
下面是python shell中的一个示例:
另外,你可能想知道为什么我还在使用Django 1.11。。。这是因为我们使用的是DjangoCMS,不幸的是,它最多只支持1.11…django文档解释了如何使用它。从文档中: 默认情况下,Python DB API将返回不带字段名的结果,这意味着您将得到一个值列表,而不是一个dict。在性能和内存成本较低的情况下,您可以使用如下方式将结果作为dict返回: 或者你也可以把你的名字命名为双倍
from collections import namedtuple
def namedtuplefetchall(cursor):
"Return all rows from a cursor as a namedtuple"
desc = cursor.description
nt_result = namedtuple('Result', [col[0] for col in desc])
return [nt_result(*row) for row in cursor.fetchall()]
我考虑了使用
namedtuple
的建议
到目前为止,它给了我想要的东西;我现在可以在模板中执行类似于{{row.field}
的操作
但我想我需要确保我的过程不会太复杂和烦人。如果我的代码已经很理想或者不理想,那么下面的代码的评估可能会更有用一些
您可以创建一个命名的耦合来获得您想要的。
from collections import namedtuple
def namedtuplefetchall(cursor):
"Return all rows from a cursor as a namedtuple"
desc = cursor.description
nt_result = namedtuple('Result', [col[0] for col in desc])
return [nt_result(*row) for row in cursor.fetchall()]