前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >嵌入式Python概述(二)

嵌入式Python概述(二)

作者头像
用户7741497
发布2022-08-03 11:37:58
5460
发布2022-08-03 11:37:58
举报
文章被收录于专栏:hml_知识记录

从 Python 调用 IRIS API

如果使用的是嵌入式 Python 并且需要与 IRIS 交互,可以使用 Python shell 中的 iris 模块,或者使用 Python 编写的 IRIS 类中的方法。要遵循本节中的示例,可以使用 ObjectScript 命令 do ##class(%SYS.Python).Shell() 从终端会话启动 Python shell

当启动终端会话时,将被放置在 IRISUSER 命名空间中,将看到提示 USER>。但是,如果从 GitHub 加载了示例类,则需要在 SAMPLES 命名空间中才能访问它们。

在终端中,更改为 SAMPLES 命名空间,然后启动 Python shell,如下所示:

代码语言:javascript
复制
USER>set $namespace = "SAMPLES"
SAMPLES>do ##class(%SYS.Python).Shell()

Python 3.9.5 (default, Jul 19 2021, 17:50:44) [MSC v.1927 64 bit (AMD64)] on win32
Type quit() or Ctrl-D to exit this shell.
>>>

当从终端会话启动 Python shell 时,Python shell 继承与终端相同的上下文,例如,当前命名空间和用户。局部变量不被继承。

使用类

要从 Python 访问 IRIS 类,请使用 iris 模块来实例化要使用的类。然后,可以像访问 Python 类一样使用访问它的属性和方法。

注意:可能习惯于在 Python 中导入模块,然后再使用它,例如:

代码语言:javascript
复制
>>> import iris

但是,在使用 %SYS.Python 类的 Shell() 方法运行 Python shell时,不需要显式导入 iris 模块。继续使用该模块。

以下示例使用系统类 %Library.FileManagerDirectory() 方法打印 IRIS 管理器目录的路径:

代码语言:javascript
复制
>>> lf = iris.cls('%Library.File')
>>> print(lf.ManagerDirectory())
C:\InterSystems\IRIS\mgr\

此示例使用系统类 %SYSTEM.CPUDump() 方法来显示有关正在运行 IRIS 实例的服务器的信息:

代码语言:javascript
复制
>>> cpu = iris.cls('%SYSTEM.CPU')
>>> cpu.Dump()
 
-- CPU Info for node MYSERVER ----------------------------------------------
          Architecture: x86_64
                 Model: Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz
                Vendor: Intel
          # of threads: 4
            # of cores: 2
            # of chips: 1
 # of threads per core: 2
   # of cores per chip: 2
          MT supported: 1
            MT enabled: 1
                   MHz: 2904
------------------------------------------------------------------------------

此示例使用 GitHubSamples-Data 存储库中的 Sample.Company 类。虽然可以使用任何命名空间中以百分号 (%) 开头的类(如 %SYS.Python%Library.File)来访问 Sample.Company 类,但如前所述,必须位于 SAMPLES 命名空间中。

Sample.Company 的类定义如下:

代码语言:javascript
复制
Class Sample.Company Extends (%Persistent, %Populate, %XML.Adaptor)
{

/// The company's name.
Property Name As %String(MAXLEN = 80, POPSPEC = "Company()") [ Required ];

/// The company's mission statement.
Property Mission As %String(MAXLEN = 200, POPSPEC = "Mission()");

/// The unique Tax ID number for the company.
Property TaxID As %String [ Required ];

/// The last reported revenue for the company.
Property Revenue As %Integer;

/// The Employee objects associated with this Company.
Relationship Employees As Employee [ Cardinality = many, Inverse = Company ];

}

此类扩展 %Library.Persistent(通常缩写为 %Persistent),这意味着此类的对象可以持久保存在 IRIS 数据库中。该类还具有多个属性,包括 NameTaxID,这两个属性都是保存对象所必需的。

尽管不会在类定义中看到它们,但持久类带有许多用于操作此类对象的方法,例如 %New()%Save()%Id()%OpenId()。但是,Python 方法名称中不允许使用百分号 (%),因此请改用下划线 (_)。

下面的代码创建一个新的 Company 对象,设置所需的 NameTaxID 属性,然后将公司保存在数据库中:

代码语言:javascript
复制
>>> myCompany = iris.cls('Sample.Company')._New()
>>> myCompany.Name = 'Acme Widgets, Inc.'
>>> myCompany.TaxID = '123456789'
>>> status = myCompany._Save()
>>> print(status)
1
>>> print(myCompany._Id())
22

上面的代码使用 _New() 方法创建类的实例,并使用 _Save() 将实例保存在数据库中。 _Save() 方法返回一个状态码。在这种情况下,1 表示保存成功。当保存一个对象时, IRIS 会为其分配一个唯一 ID,可以在以后使用该 ID 从存储中检索该对象。 _Id() 方法返回对象的 ID

使用类的 _OpenId() 方法将对象从持久存储中检索到内存中进行处理:

代码语言:javascript
复制
>>> yourCompany = iris.cls("Sample.Company")._OpenId(22)
>>> print(yourCompany.Name)
Acme Widgets, Inc.

将以下代码添加到类定义中会创建一个 Print() 方法,该方法打印当前公司的 NameTaxID。将 Language 关键字设置为 python 会告诉类编译器该方法是用 Python 编写的。

代码语言:javascript
复制
Method Print() [ Language = python ]
{
    print ('\nName: ' + self.Name + ' TaxID: ' + self.TaxID)
}

给定一个 Company 对象,可以调用它的 Print() 方法,如下所示:

代码语言:javascript
复制
>>> yourCompany.Print()
 
Name: Acme Widgets, Inc. TaxID: 123456789

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从 Python 调用 IRIS API
    • 使用类
    相关产品与服务
    访问管理
    访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档