Python 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?


person TehTechGuy    schedule 14.10.2013    source источник


Ответы (1)


Я только что понял, в чем дело. Возвращаемый объект данных — это объект 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())
person TehTechGuy    schedule 14.10.2013
comment
Да, это сработало. Но когда я сериализую строку, она не добавляет ключ System_Value - person Rishabh; 25.09.2014
comment
Кто-нибудь знает, как обойти эту проблему при использовании LEFT OUTER JOIN, он все равно выдает ту же ошибку. - person bobthemac; 05.04.2016