【问题标题】:Query SAP database from Python? [closed]从 Python 查询 SAP 数据库? [关闭]
【发布时间】:2020-09-08 23:03:13
【问题描述】:

可以使用 Python 查询 SAP 数据库吗?

【问题讨论】:

  • SAP 作为数据库引擎!?你能详细说明一下吗?
  • 我的意思是 SAP 是一个非常复杂的系统,但对于这个问题,我只需要能够获得 ABAP 程序的输出(我认为它们称为输出list)。
  • 你指的是一个叫做“abap list”的东西。在外部获得相同的输出并不容易。大多数标准都没有实现为功能。因此,如果没有一些 abap 编程,您就无法从外部 sap 获得输出。
  • 使用 Python 调用 RFC(远程函数调用)可以正常工作:github.com/SAP/PyRFC
  • 连接到基于 SAP ABAP 的系统的数据库始终是可以独立工作的数据库。那么Python为什么要通过中间SAP系统而不是直接与数据库通信呢? (通过 ODBC 等)这个问题真的很模棱两可,太笼统了,不幸的是will attract opinionated answers

标签: python abap sap-basis pyrfc


【解决方案1】:

Python SAP RFC module 似乎不活跃 - last (insignificant ) commit 2 年前 - 但可能会为您服务:

Pysaprfc 是 SAP librfc 的包装器(Windows 上的 librfc32.dll,Linux 上的 librfccm.so 或 librfc.so)。它使用 Thomas Heller 出色的 ctypes 扩展包来访问 librfc 并定义 SAP 兼容的数据类型。

现代 SAP 版本采用 Web Service way - 您可以构建 SAP Web Service 并从 Python 使用它。

借助 SAP NetWeaver,开发人员可以连接应用程序和数据源,以使用 Web 服务集成流程。

特别是,开发人员可以使用一个基础架构以基于行业标准的方式定义、实施和使用 Web 服务。 SAP NetWeaver 支持同步、异步、有状态和无状态 Web 服务模型 - 使开发人员能够支持不同的集成方案。

sapnwrfc 支持 SAP NetWeaver 功能,supersedes 旧版 RFC SDK,并得到积极维护。

【讨论】:

  • +1:使用 urllib2 编写 Python Web 服务非常容易。
  • 太棒了,网络服务就是要走的路!
  • 这显然是对这个问题的技术回答——但如果你所做的只是写查询,为什么? SQ01 和 SQVI 提供对数据库的查询访问。
【解决方案2】:

Python RFC 连接器现已开源:PyRFC

【讨论】:

  • 感谢您的链接!您知道是否也可以将它与 SAP Business 1 一起使用?我做了一些研究,看起来 SAP NW RFC SDK 与 SAP Business 1 不兼容。但我还没有找到明确的答案。
  • @TobiasFeil 我不知道。但是为什么不在 StackOverflow 上将这个作为新问题提出来。别忘了用“sap”这个标签,然后很可能会有高手来解答。
【解决方案3】:

SAP 现在有一个名为 pyrfc 的 Python RFC 连接器。这取代了 sapnwrfc。

可以在以下位置找到:https://github.com/SAP/PyRFC

“pyrfc Python 包为 SAP NetWeaver RFC 库提供 Python 绑定,以便通过 SAP 远程函数调用 (RFC) 协议以舒适的方式从 Python 调用 ABAP 模块和从 ABAP 调用 Python 模块。”

【讨论】:

  • @bsrdjan PyRFC 是否可以自动执行用户通常在 SAP GUI 上执行的任务? (为了测试自动化)
  • 这取决于您要调用的函数,并非所有函数都是为使用 RFC 而编写的。已经有一段时间了,但是深入研究每个函数的文档将揭示它是否可以被 RFC 调用
  • 如果与CCo 或 JCo 相比,PyRFC 是否涵盖相同的功能?
  • 抱歉,我对 CCo 或 JCo 都不熟悉。
  • 目的是一样的,通过SAP RFC协议将其他语言与ABAP集成。一些功能上的差异是可能的,比如暴露的 API。
【解决方案4】:

如果您在谈论(以前的名称)SAP 数据库 AKA SapDb,现在是 MaxDB(有一段时间也由 MySql Inc 分发,now 再次由 SAP 分发 - 和所以命名为SAP MaxDB),它带有几个Python访问模块,记录在here

这是我可以附加到“SAP 作为数据库引擎”的唯一含义——您想要访问 SAP MaxDB。其他答案做出不同的假设,并且(我相信)也是正确的......在这些不同的假设下。

【讨论】:

  • 原始问题不是很清楚,您的解释非常恰当。现场安装的 SAP 不使用 SAP MaxDB,所以我猜测的含义有些不同。
  • 实际上,我的意思是平均 SAP 安装,请原谅我的歧义。
【解决方案5】:

Sap 不是数据库服务器。 但是使用 Python SAP RFC 模块,您可以很容易地查询大多数表。它正在使用一些 sap 不受支持的功能(全世界都在使用)。而且这个函数对字段大小和数据类型有一定的限制。

【讨论】:

  • 你可以将它用作数据库服务器——尽管它非常昂贵:P
【解决方案6】:

如上所述,当您只想读取表或进行 RFC 或 BAPI 调用时,可以将 CPython 与未维护的 Python SAP RFC 模块或 Piers Harding 的 SAP RFC 一起使用。仅读取表的 RFC 调用是 RFC_GET_TABLE_ENTRIES 或 RFC_READ_TABLE,前者是首选,但也不会发布给客户。

对于更正式的方式,您可以使用 SAP 的 JCO 连接器和 Jython 或 SAP 的 .Net 连接器和 Ironpython;这两个连接器都可以从 SAP 的服务市场下载,并且都允许调用 RFC 功能,包括上面列出的两个调用。

如上所述,SAP 提出的访问后端功能的方式是通过 SAP 庞大的 SOA 基础架构。在这里,您可以使用 Jython,例如Axis 库或 Ironpython 与 Microsofts WCF。请注意,SAP 提供的服务显然不允许您访问普通表,而是您可以调用服务提供的内容。 SAP 已经提供了大约 3.000 项服务(请参阅 SDN 上的 ES Wiki),一旦您将业务逻辑放入支持远程的功能模块中,创建自己的服务实际上非常简单。

【讨论】:

    【解决方案7】:

    Python 是最常用的面向对象编程语言之一,非常易于编码和理解。

    为了在 SAP 中使用 Python,我们需要安装 Python SAP RFC 模块,即 PyRFC。它的一种可用方法是 RFC_READ_TABLE,可以调用它从 SAP 数据库中的表中读取数据。

    此外,PyRFC 包提供了各种绑定,可用于以任何一种方式进行调用。我们可以用来从 ABAP 模块调用 Python 模块,或者反过来。可以定义用于数据交换的等效 SAP 数据类型。

    另外,我们可以在 Python 中创建 Web 服务,用于相互通信。 SAP NetWeaver 与有状态或无状态的 Web 服务完全兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2012-12-19
      • 2019-06-15
      相关资源
      最近更新 更多