0

我试图从 ladon/python 返回 4 到 100 行,但它只返回 for 循环中的第一行。目前它返回

编辑:如果我只是这样做,则 For 循环有效

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

ItemNum-1234-ItemNum

Quant-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
4

2 回答 2

1

你在 for 循环中有返回值。结果,该函数将在第一个循环期间退出,因此您只会得到第一个结果。我的建议:删除命令“return”之前的额外标签。

您应该考虑将所有结果附加到列表中:

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]

于 2015-02-12T19:54:10.967 回答
0

您可能会遇到问题,因为for循环正在迭代 value cursor.fetchall()。这就是为什么您的代码在第一行之后停止的原因。如果您将rows值更改为列表,(例如[])这应该会有所帮助。

于 2015-02-12T19:23:55.490 回答