gpt4 book ai didi

python - 通过 PyRFC 在 RFC_READ_TABLE 调用中打开 SQL 条件

转载 作者:行者123 更新时间:2023-11-28 21:19:44 29 4
gpt4 key购买 nike

如何使用 PyRFC 在 RFC_READ_TABLE 查询中指定 Open SQL WHERE 子句?

我正在尝试开始使用 PyRFC 让 python 从 SAP 中提取表(在没有支持/合作基础团队的情况下)。在这个例子中来自 http://scn.sap.com/community/scripting-languages/blog/2012/11/04/revisiting-python-and-sap-with-pyrfc ,他们使用:

pyrfc.Connector.call("RFC_READ_TABLE", QUERY_TABLE=table, DELIMITER='|')

http://saplsmw.com/node/101表示需要将 WHERE 子句作为 OPTION 传递给 RFC 调用。我如何在 PyRFC 中执行此操作? (OPTIONS是SAP端RFC_READ_TABLE的功能模块声明中表类型的导出变量)。

编辑:好的http://scn.sap.com/community/scripting-languages/blog/2014/05/05/python-for-basis有一个在 OPTIONS 中发送 WHERE 子句的例子:

OPTIONS = [{'TEXT':source_where}])

所以看起来语法是单元素字典的数组(映射 SAP 表类型),其中键是 SAP 数据类型,值是 WHERE 子句。

所以下一个问题是:如何指定要发送到 RFC_READ_TABLE 的 PACKAGE SIZE,以便我可以在不达到内部表限制的情况下提取大型表?

最佳答案

RFC_READ_TABLE 有一个参数“ROWCOUNT”,它指定在单个调用中返回的最大行数。

当然,如果您说一次限制为 1000 行,那么如果表包含的行数超过 1000 行,那么您可能永远不会下载其他行。

要解决这个问题,还有另一个参数“ROWSKIPS”,您可以通过它指定要返回的起始行。

所以,第一次调用行数 = 1000ROWSKIPS = 0

下一个电话行数 = 1000ROWSKIPS = 1000

下一个电话行数 = 1000ROWSKIPS = 2000

依此类推,每次递增 ROWSKIPS,如下所示:ROWSKIPS = ROWSKIPS + ROWCOUNT。

同时定义了 ROWCOUNT 和 ROWSKIPS 的 PyRFC 调用示例,它以 10 个为一组从 TCURR 读取(并且 FCURR 设置为“USD”):

#!/usr/bin/env python
from pyrfc import Connection, ABAPApplicationError, ABAPRuntimeError, LogonError, CommunicationError
from ConfigParser import ConfigParser
from pprint import PrettyPrinter

def main():

try:

config = ConfigParser()
config.read('sapnwrfc.cfg')
params_connection = config._sections['connection']
conn = Connection(**params_connection)

options = [{ 'TEXT': "FCURR = 'USD'"}]
pp = PrettyPrinter(indent=4)
ROWS_AT_A_TIME = 10
rowskips = 0

while True:
print u"----Begin of Batch---"
result = conn.call('RFC_READ_TABLE', \
QUERY_TABLE = 'TCURR', \
OPTIONS = options, \
ROWSKIPS = rowskips, ROWCOUNT = ROWS_AT_A_TIME)
pp.pprint(result['DATA'])
rowskips += ROWS_AT_A_TIME
if len(result['DATA']) < ROWS_AT_A_TIME:
break

except CommunicationError:
print u"Could not connect to server."
raise
except LogonError:
print u"Could not log in. Wrong credentials?"
raise
except (ABAPApplicationError, ABAPRuntimeError):
print u"An error occurred."
raise

if __name__ == '__main__':
main()

关于python - 通过 PyRFC 在 RFC_READ_TABLE 调用中打开 SQL 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24172130/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com