2015-02-12 2 views
0

Я пытаюсь вернуть 4 до 100 строк из ladon/python, но он возвращает только первую строку в цикле for. В настоящее время она возвращаетLadon только возвращает один цикл for for

EDIT: Для цикла работает, если я просто

**for row in cursor: 
      RSOID = row.RSO_ID 
      ALIAS=row.ALIAS 
      Qty=row.QTY 
      print(RSOID) 
      print(ALIAS) 
      print(Qty)** 

ItemNum-1234-ItemNum

Квант-1-Quant

RSOID-1-RSOID

Под. Код:

class OrderLookUpResponse(LadonType): 
RSOID = str 
ItemNum = str 
Quant = str 

@ladonize(str,rtype=OrderLookUpResponse) 
def LookupOrder(self,OrderID): 
    cursor.execute("SELECT ALIAS,QTY,RSO_ID FROM RSK_DETAIL WHERE RSO_ID IN(SELECT RSO_ID FROM RSK_ORDER WHERE ACCT_CODE = 'SCRUBBED')") 
    rows=cursor.fetchall() 
    for row in rows: 
      RSOID = row.RSO_ID 
      ALIAS=row.ALIAS 
      Qty=row.QTY 
      result = OrderLookUpResponse() 
      result.RSOID=RSOID 
      result.ItemNum=ALIAS 
      result.Quant=Qty 
      return result 

ответ

1

У вас есть возврат внутри цикла for. В результате функция выйдет во время первого цикла, и, таким образом, вы получите только первый результат. Мой совет: удалите дополнительные вкладки перед командой «return».

Вы должны рассмотреть appending к списку всех результатов:

from ladon.ladonizer import ladonize 
from ladon.types.ladontype import LadonType 

class OrderLookUpResponse(LadonType): 
    RSOID = str 
    ItemNum = str 
    Quant = str 

@ladonize(str,rtype=[OrderLookUpResponse]) 
def LookupOrder(self,OrderID): 
    results=[] 
    cursor.execute("SELECT ALIAS,QTY,RSO_ID FROM RSK_DETAIL WHERE RSO_ID IN(SELECT RSO_ID FROM RSK_ORDER WHERE ACCT_CODE = 'SCRUBBED')") 
    rows=cursor.fetchall() 
    for row in rows: 
     RSOID = row.RSO_ID 
     ALIAS=row.ALIAS 
     Qty=row.QTY 
     result = OrderLookUpResponse() 
     result.RSOID=RSOID 
     result.ItemNum=ALIAS 
     result.Quant=Qty 
     results.append(result) 
    return results 

Сводка изменений (для того, чтобы быть легче следовать):
1) добавлены вкладки в классе тела «OrderLookUpResponse»
2) удалили одну вкладку перед возвратом.
3) добавлен список под названием «Результаты»
4) изменен RTYPE = OrderLookUpResponse к RTYPE = [OrderLookUpResponse]

+0

Лучше, но теперь он возвращает только эту последнюю строку. – cambria

+0

Не могли бы вы попытаться добавить все результаты, как в примере. Это работает? – Stanislav

+0

Append не работает. Я получаю совершенно новый набор ошибок и несоответствующих типов. – cambria

0

У вас может возникнуть проблема, потому что цикл for выполняет итерирование по значению cursor.fetchall(). Вот почему ваш код останавливается после первой строки. Если вы измените значение rows в список (например, []), это должно помочь.

+0

Я изменил мои строки до курсора, который список или рассматривается как список в соответствии с документацией [здесь] (https://code.google.com/p/pyodbc/wiki/Cursor), но без изменений – cambria

Смежные вопросы