Python peewee - 从多个表中选择

时间:2013-10-14 17:46:08

标签: python mysql sql orm peewee

我正在尝试使用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字段的值?

1 个答案:

答案 0 :(得分:10)

我只知道问题所在。它返回的数据对象是System_Headers对象,它是该特定表的模型。因此,该模型没有System_Value属性。通过向我的peewee代码添加naive(),它会将该属性传递到我的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())