8

我正在尝试使用 peewee 从单独的表中选择两个字段。我相信我的问题是迭代生成的对象。

我在 Python 中有以下代码:

sHeader_Value = (System_Headers
  .select(System_Headers.SystemHeader_Name, System_Data.System_Value)
  .join(System_Header_Link)
  .join(System_Data_Link)
  .join(System_Data))

该代码生成以下 SQL:

SELECT t1.`SystemHeader_Name`, t4.`System_Value` 
FROM `system_headers` AS t1
INNER JOIN `system_header_link` AS t2 ON (t1.`SystemHeader_ID` = t2.`SystemHeader_ID`) 
INNER JOIN `system_data_link` AS t3 ON (t2.`SystemHeaderLink_ID` = t3.`SystemHeaderLink_ID`)
INNER JOIN `system_data` AS t4 ON (t3.`SystemData_ID` = t4.`SystemData_ID`)

在 MySQL Workbench 中执行该操作,我得到一个包含两个字段的表:SystemHeader_Name, System_Value.

我试图弄清楚如何System_Value从查询包装器中获取。如果我执行以下操作:

for s in sHeader_Value:
  print s.SystemHeader_Name, s.System_Value

我收到一个AttributeError,说明'System_Headers' object has no attribute 'System_Value'.

请注意,如果我只尝试做print s.SystemHeader_Name,它会完美执行。

如何捕获我的System_Value字段的值?

4

1 回答 1

9

我才弄清楚问题出在哪里。它返回的数据对象是一个System_Headers对象,它是该特定表的模型。因此,该模型没有System_Value属性。通过添加naive()到我的 peewee 代码中,它将属性传递给我的System_Headers模型,从而允许我访问该System_Value字段。

下面是工作代码:

sHeader_Value = (System_Headers
  .select(System_Headers.SystemHeader_Name, System_Data.System_Value)
  .join(System_Header_Link)
  .join(System_Data_Link)
  .join(System_Data)
  .naive())
于 2013-10-14T18:31:07.567 回答