嗨社区,
在本文中,我将演示 InterSystems Embedded Python 的用法,我们将涵盖以下主题:
- 1-嵌入式Python概述
- 2-嵌入式Python的使用
- 2.1- 从 ObjectScript 使用 Python 库
- 2.2- 从 Python 调用 InterSystems API
- 2.3- 一起使用 ObjectScript 和 Python
- 3-使用python内置函数
- 4-Python 模块/库
- 5 个嵌入式 Python 用例
- 5.1- 使用 python Reportlab 库打印 PDF
- 5.2-使用Python二维码库生成二维码
- 5.3- 使用 Python Folium 库获取 GEO 位置
- 5.4- 通过使用在交互式地图上生成和标记位置 Python Folium 库
- 5.5- 使用 Python Pandas 库进行数据分析
- 6-总结
我们从概述开始
1-嵌入式Python概述
嵌入式 Python 是 InterSystems IRIS 数据平台的一项功能,它允许 Python 开发人员完全直接地访问 InterSystems IRIS 中的数据和功能。
InterSystems IRIS 带有一种名为 ObjectScript 的强大内置编程语言,可在数据平台内部进行解释、编译和运行。
因为 ObjectScript 在 InterSystems IRIS 的上下文中执行,所以它可以直接访问数据平台的内存和过程调用。
嵌入式 Python 是 Python 编程语言的扩展,允许在 InterSystems IRIS 进程上下文中执行 Python 代码。
因为 ObjectScript 和 Python 都在同一个对象内存上操作,可以说 Python 对象不只是模拟 ObjectScript 对象,它们本身就是 ObjectScript 对象。
这些语言的这种共同平等意味着您可以选择最适合工作的语言,或者您最习惯用来编写应用程序的语言。
2-嵌入式Python的使用
使用嵌入式 Python 时,您可以用三种不同的方式编写代码。
2.1 - 从 ObjectScript 使用 Python 库
首先,您可以编写一个普通的 .py 文件并从 InterSystems IRIS 上下文中调用它。在这种情况下,数据平台将启动 Python 进程并允许您导入一个名为 IRIS 的模块,该模块会自动将 Python 进程附加到 IRIS 内核,并让您可以从 Python 代码的上下文中访问 ObjectScript 的所有功能。
2.2 - 从 Python 调用 InterSystems API
其次,您可以编写普通的 ObjectScript 代码并使用 %SYS.Python 包实例化 Python 对象。这个 ObjectScript 包允许您导入 Python 模块和库,然后使用 ObjectScript 语法处理该代码库。
%SYS.Python 包使不了解 Python 的 ObjectScript 开发人员能够在其 ObjectScript 代码中使用丰富的 Python 库生态系统。
2.3 - 一起使用 ObjectScript 和 Python
第三,您可以创建一个 InterSystems 类定义并用 Python 编写方法。对该方法的任何调用都会启动 Python 解释器。此方法的好处是使用对包含类实例的引用填充该 Python 代码块的 self 关键字。此外,通过使用 Python 在 InterSystems 类中编写类方法,您可以轻松实现处理 SQL 中不同数据输入事件的方法,例如将新行添加到表中。
它还允许在 Python 中快速开发自定义存储过程。
如您所见,嵌入式 Python 允许您在不牺牲性能的情况下选择最适合工作的编程语言。
3-使用Python内置函数
Python 解释器有许多内置的函数和类型,它们总是可用的。它们按字母顺序列在此处。
内置函数 |
|||
---|---|---|---|
A
乙
C
丁
|
乙
F
G
H
我 |
大号
米
否
欧
P
|
R
小号
吨
V
Z
_ |
使用 python内置函数
为了使用 python 内置函数,我们必须导入“builtins”,然后我们才能调用该函数
-----171-----
Python print() 函数实际上是内置模块的一个方法,因此您现在可以从 ObjectScript 使用此函数:
-----172-----
-----173-----
同样,您可以使用 help() 方法获取有关列表对象的帮助。
-----174-----
4-Python 模块或库
一些 python 模块或库是默认安装的,并且已经可以使用。通过使用 help("module" 函数我们可以查看这些模块:
安装 python 模块或库
除了这些模块之外,python 还有数百个模块或库,可以在pypi.org查看( Python 包索引 (PyPI) 是 Python 编程语言的软件存储库)
如果我们需要一些其他的库,那么我们需要使用 intersystems irispip 命令安装这些库
比如 Pandas 就是 python 数据分析库。以下命令使用包安装程序 irispip 在 Windows 系统上安装 pandas:
-----175-----
请注意 C:\InterSystems 将替换为 Intersystems 安装目录
5 个嵌入式 Python 用例
5.1-使用python Reportlab库打印PDF
我们需要使用 irispip 命令安装 Reportlab 库,然后创建 objectscript 函数。
给定一个文件位置,以下 ObjectScript 方法 CreateSamplePDF() 创建一个示例 PDF 文件并将其保存到该位置。
Class Demo.PDF { ClassMethod CreateSamplePDF(fileloc As %String ) As %Status { set canvaslib = ##class ( %SYS.Python ).Import( "reportlab.pdfgen.canvas" ) set canvas = canvaslib.Canvas(fileloc) do canvas.drawImage( "C:\Sample\isc.png" , 150 , 600 ) do canvas.drawImage( "C:\Sample\python.png" , 150 , 200 ) do canvas.setFont( "Helvetica-Bold" , 24 ) do canvas.drawString( 25 , 450 , "InterSystems IRIS & Python. Perfect Together." ) do canvas.save() } }
该方法的第一行从 ReportLab 的 pdfgen 子包中导入 canvas.py 文件。第二行代码实例化一个 Canvas 对象,然后继续调用它的方法,这与调用任何 InterSystems IRIS 对象的方法的方式非常相似。
然后您可以按照通常的方式调用该方法:
do ##class(Demo.PDF).CreateSamplePDF("C:\Sample\hello.pdf")
生成以下PDF并保存在指定位置:
5.2-使用Python二维码库生成二维码
为了生成二维码,我们需要使用irispip命令安装Qrcode库,然后使用下面的代码我们可以生成二维码:
5.3-使用Python Folium库获取GEO位置
为了获取地理数据,我们需要使用 irispip 命令安装脚本库 Folium ,然后创建以下对象脚本函数:
Class dc.IrisGeoMap.Folium Extends %SwizzleObject { // Function to print Latitude, Longitude and address details ClassMethod GetGeoDetails(addr As %String ) [ Language = python ] { from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent= "IrisGeoApp" ) try : location = geolocator.geocode(addr) print ( "Location:" ,location.point) print ( "Address:" ,location.address) point = location.point print ( "Latitude:" , point.latitude) print ( "Longitude:" , point.longitude) except: print ( "Not able to find location" ) } }
连接到 IRIS 终端并运行以下代码
do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("Cambridge MA 02142")
下面将是输出:
5.4-通过使用Python Folium库在交互式地图上生成并标记位置
我们将使用同样的 Python Folium 库在交互式地图上生成和标记位置,下面的对象脚本函数将完成所需的操作:
ClassMethod MarkGeoDetails(addr As %String , filepath As %String ) As %Status [ Language = python ] { import folium from geopy.geocoders import Nominatim geolocator = Nominatim(user_agent= "IrisGeoMap" ) #split address in order to mark on the map locs = addr.split( "," ) if len(locs) == 0 : print ( "Please enter address" ) elif len(locs) == 1 : location = geolocator.geocode(locs[ 0 ]) point = location.point m = folium.Map(location=[point.latitude,point.longitude], tiles= "OpenStreetMap" , zoom_start= 10 ) else : m = folium.Map(location=[ 20 , 0 ], tiles= "OpenStreetMap" , zoom_start= 3 ) for loc in locs: try : location = geolocator.geocode(loc) point = location.point folium.Marker( location=[point.latitude,point.longitude], popup=addr, ).add_to(m) except: print ( "Not able to find location : " ,loc) map_html = m._repr_html_() iframe = m.get_root()._repr_html_() fullHtml = """ <!DOCTYPE html> <html> <head></head> <body> """ fullHtml = fullHtml + iframe fullHtml = fullHtml + """ </body> </html> """ try : f = open (filepath, "w" ) f. write (fullHtml) f. close () except: print ( "Not able to write to a file" ) }
连接到 IRIS 终端并调用 MarkGeoDetails 函数
我们将调用 dc.IrisGeoMap.Folium 类的 MarkGeoDetails() 函数。
该函数需要两个参数:
- location/locations(我们可以通过在中间添加“,”来传递多个位置)
- HTML文件路径
让我们运行以下命令在地图上标记 Cambridge MA 02142、NY、London、UAE、Jeddah、Lahore 和 Glasgow,并将其保存为“irisgeomap_locations.html”文件
do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("Cambridge MA 02142,NY,London,UAE,Jeddah,Lahore,Glasgow","d:\irisgeomap_locations.html")
上面的代码将生成以下交互式 HTML 文件:
5.5-使用 Python Pandas 库进行数据分析
我们需要使用irispip命令安装Pandas库,然后我们可以使用下面的代码查看数据
6-总结
InterSystems嵌入式Python(IEP)是一个强大的功能,它允许你将Python代码与你的InterSystems应用程序无缝集成。有了IEP,你可以利用Python中的大量库和框架来增强你的InterSystems应用程序的功能。在这篇文章中,我们将探讨IEP的主要特点和好处。
IEP是作为一组库实现的,它使你能够在InterSystems应用程序中与Python对象交互并执行Python代码。这为将Python代码集成到你的InterSystems应用程序中提供了一个简单有效的方法,使你能够执行数据分析、机器学习、自然语言处理和其他在InterSystems ObjectScript中可能难以实现的任务。
使用IEP的主要优势之一是它提供了一种弥合Python和InterSystems世界之间差距的方法。这使得我们可以很容易地利用两种语言的优势来创建强大的应用程序,将两个世界的优点结合起来。
IEP还提供了一种方法,通过利用Python的功能来扩展你的InterSystems应用程序的功能。这意味着你可以利用Python中大量的库和框架来完成那些在InterSystems ObjectScript中可能难以实现的任务。
InterSystems Embedded Python提供了一个强大的方法,通过利用Python的能力来扩展你的InterSystems应用程序的功能。通过将Python代码集成到你的InterSystems应用程序中,你可以利用Python中大量的库和框架来执行在InterSystems ObjectScript中可能难以实现的复杂任务。
谢谢。