程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

嵌入式Python概述(二)

編輯:Python

從 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,如下所示:

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 中導入模塊,然後再使用它,例如:

>>> import iris

但是,在使用 %SYS.Python 類的 Shell() 方法運行 Python shell時,不需要顯式導入 iris 模塊。繼續使用該模塊。

以下示例使用系統類 %Library.FileManagerDirectory() 方法打印 IRIS 管理器目錄的路徑:

>>> lf = iris.cls('%Library.File')
>>> print(lf.ManagerDirectory())
C:\InterSystems\IRIS\mgr\

此示例使用系統類 %SYSTEM.CPUDump() 方法來顯示有關正在運行 IRIS 實例的服務器的信息:

>>> 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 的類定義如下:

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 屬性,然後將公司保存在數據庫中:

>>> 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() 方法將對象從持久存儲中檢索到內存中進行處理:

>>> yourCompany = iris.cls("Sample.Company")._OpenId(22)
>>> print(yourCompany.Name)
Acme Widgets, Inc.

將以下代碼添加到類定義中會創建一個 Print() 方法,該方法打印當前公司的 NameTaxID。將 Language 關鍵字設置為 python 會告訴類編譯器該方法是用 Python 編寫的。

Method Print() [ Language = python ]
{
print ('\nName: ' + self.Name + ' TaxID: ' + self.TaxID)
}

給定一個 Company 對象,可以調用它的 Print() 方法,如下所示:

>>> yourCompany.Print()
Name: Acme Widgets, Inc. TaxID: 123456789

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved