【问题标题】:Converting Intersystems cache objectscript into a python function将 Intersystems 缓存对象脚本转换为 python 函数
【发布时间】:2022-11-24 00:21:08
【问题描述】:

我正在通过 python 进程访问 Intersystems 缓存 2017.1.xx 实例,以获取有关数据库的各种属性,以便能够监视数据库。

我要监控的项目之一是许可证使用情况。我在终端窗口中编写了一个 objectscript 脚本来访问用户的许可证使用情况:

   s Rset=##class(%ResultSet).%New("%SYSTEM.License.UserListAll")
   s r=Rset.Execute()
   s ncol=Rset.GetColumnCount()
   While (Rset.Next()) {f i=1:1:ncol w !,Rset.GetData(i)}

但是,我一直无法确定如何将此脚本转换为 Python 等效脚本。我正在使用 intersys.pythonbind3 导入来连接和访问缓存实例。我已经能够创建 python 函数来访问实例中的大部分其他内容,但是我不知道如何将这一数据转换为 Python (3.7)。

【问题讨论】:

    标签: python caching intersystems


    【解决方案1】:

    以下应该有效(基于documentation):

    query = intersys.pythonbind.query(database)
    query.prepare_class("%SYSTEM.License","UserListAll")
    query.execute();
    
    # Fetch each row in the result set, and print the
    # name and value of each column in a row: 
    while 1:
       cols = query.fetch([None])
       if len(cols) == 0: break
       print str(cols[0])
    

    另外,请注意 InterSystems IRIS——Caché 的后继者现在将 Python 作为嵌入式语言。查看更多docs

    【讨论】:

    • 感谢您的答复。不幸的是,我认为这是正确转换为 Python 的方法。但是,使用该语法会产生此错误:[SQLCODE:<-428>:<未找到存储过程>] [位置:<SPPrepare>] [%msg:<名为 %SYSTEM.LICENSE_USERLISTALL 的过程不存在>]
    • 那是不可能的。看起来 pythonbind 试图将此类查询调用为存储过程,但此类查询未被投影为一个。
    • 那讲得通。我正在尝试另一种方法,虽然它很有希望,但还行不通<br/> hdl = self.db.run_class_method("%SQL.Statement","%New",[]) resState = None pasState = "call %SYSTEM. License_UserListAll" list=[resState, pasState] pStat = hdl.run_obj_method("%ExecDirect",list) print(f'pStat = {pStat}') print(pStat.run_obj_method("%Display",[]))<br /> 我确信这仍然不正确,但认为值得一试
    【解决方案2】:

    由于库中未正确定义提到的查询“UserListAll”;不是 SqlProc。因此,要解决此问题,需要一个带有查询的 ObjectScript 并在 Python 中使用 @Result 集或类似的方法来获取结果。所以我将其标记为已解决。

    【讨论】:

      【解决方案3】:

      不确定您为 Cache/IRIS 使用哪个 Python 接口,但是这个开源第 3 方接口值得研究您尝试做的事情:

      https://github.com/chrisemunt/mg_python

      【讨论】:

        猜你喜欢
        • 2019-07-27
        • 2017-07-21
        • 2020-06-09
        • 1970-01-01
        • 1970-01-01
        • 2021-04-15
        • 1970-01-01
        • 2011-02-19
        • 2021-08-05
        相关资源
        最近更新 更多