embeddedpy-bridge:嵌入式 Python 工具包
Embeddedpy-bridge:嵌入式 Python 工具包
概述
嵌入式 Python改变了 InterSystems IRIS 的游戏规则,可直接在数据库中访问庞大的 Python 生态系统。但是,在 ObjectScript 和 Python 之间架起桥梁有时会让人感觉像是在两个不同的世界之间转换。
为了实现这种无缝过渡,请使用embeddedpy-bridge。
该软件包是一个以开发人员为中心的实用工具包,旨在为嵌入式 Python 提供高级 ObjectScript 封装、熟悉的语法和强大的错误处理功能。它允许开发人员使用他们已经熟悉的本地 IRIS 模式与 Python 数据结构交互。
挑战
虽然 %SYS.Python 库功能强大,但开发人员经常面临一些障碍:
- 处理代理:使用原始代理浏览 Python 列表和字典对于 ObjectScript 来说并不 "原生"。
- 迭代:标准 ObjectScript
While循环无法与 Python 迭代器进行本地 "对话"。 - 命名空间管理:确保 Python 实用程序在整个系统中可用。
解决方案:embeddedpy-bridge
我的目标是创建一个 "桥梁",让 Python 感觉像是 ObjectScript 中的一等公民。
主要功能
py前缀约定:%ZPython.Utils类中的所有方法都使用py前缀(例如,pyDict()、pyList()、pyJSON()),以明确区分 Python 相关逻辑与本地 IRIS 代码。- OO 封装:
List和Dict的高级类,支持我们熟悉的方法,如GetAt()、SetAt()和Count()。 - 智能迭代器:集成的
ListIterator和DictIterator可让您使用标准 ObjectScriptWhile循环遍历 Python 数据。 - 宏支持:
%ZPython.inc文件提供了$$$pyDict和$$$pyJSON等快捷方式,可实现更简洁、更快速的开发。
使用示例
1.简单语法(宏)
无需每次都输入 ##class(...)。使用快捷键:
$$$pyDict- 创建 Python 词典。$$$pyList- 创建一个 Python 列表。$$$pyJSON(dynObj)- 立即将 JSON 对象转换为 Python 对象。
2.统一字典处理
与其管理原始 Python 代理,不如使用封装后的字典:
代码片段:
Include %ZPython
Set pyDict = $$$pyDict
Do pyDict.SetAt("Status", "Active")
Do pyDict.SetAt("Version", 1.0)
// Standard IRIS iteration
Set iter = pyDict.%GetIterator()
While iter.%GetNext(.key, .val) {
Write "Key: ", key, " Val: ", val, !
}Set pyList = $$$zpyList()
Do pyList.Append("First Item")
Do pyList.Append("Second Item")
Write "Total items: ", pyList.Count(), !
// Access by index
Write "Item 1: ", pyList.GetAt(0), !2.无缝数据转换
只需一行即可将 IRIS 动态对象转换为 Python 对象并返回:
代码片段
Set dynObj = {"name": "John", "roles": ["Admin", "User"]}
Set pyObj = $$$pyJSON(dynObj)
// Verify Python type
Write ##class(%ZPython.Utils).IsType(pyObj, "dict") // 1这个项目的目标是在两个强大的世界之间架起一座桥梁。InterSystems IRIS 为嵌入式 Python 提供引擎,而 embeddedpy-bridge 则提供方向盘。