2011-12-20 10 views
0

Pythonインターフェイスを使用して、インターシステムキャッシュグローバルに直接アクセスして反復処理することはできますか?また、PythonはリンクサーバーまたはODBC接続を使用すると同じ「テーブル」を公開しますか?Intersystems Cache - Pythonを使用して、SQLテーブルとして公開されているグローバルクラスまたは唯一のクラスに直接アクセスできますか?

答えて

1

グローバルに直接アクセスする場合は、そうするストアドプロシージャを作成できます。これを行う前に、セキュリティの意味を考慮する必要があります。グローバルにあるすべてのデータは、ODBCアクセスを持つすべての人に公開されます。

以下は、最大9個のグローバルサブスクリプトにそのノードの値を加えたストアドプロシージャの例です。必要に応じて簡単に修正することができます。 (pyodbcで)あなたが使用する可能性がありますのpythonからこれをアクセスするには

Query OneGlobal(GlobalName As %String) As %Query(ROWSPEC = "NodeValue:%String,Sub1:%String,Sub2:%String,Sub3:%String,Sub4:%String,Sub5:%String,Sub6:%String,Sub7:%String,Sub8:%String,Sub9:%String") [SqlProc] 
{ 
} 

ClassMethod OneGlobalExecute(ByRef qHandle As %Binary, GlobalName As %String) As %Status 
{ 
    S qHandle="^"_GlobalName 
    Quit $$$OK 
} 

ClassMethod OneGlobalClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = OneGlobalExecute ] 
{ 
    Quit $$$OK 
} 

ClassMethod OneGlobalFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = OneGlobalExecute ] 
{ 

    S Q=qHandle 
    S Q=$Q(@Q) b 
    I Q="" S Row="",AtEnd=1 Q $$$OK 
    S Depth=$QL(Q) 
    S $LI(Row,1)=$G(@Q) 
    F I=1:1:Depth S $LI(Row,I+1)=$QS(Q,I) 
    F I=Depth+1:1:9 S $LI(Row,I+1)="" 
    S AtEnd=0 
    S qHandle=Q 
    Quit $$$OK 
} 

import pyodbc 
import win32com.client 
import urllib2 

class CacheOdbcClient: 

    connectionString="DSN=MYCACHEDSN" 

    def __init__(self): 
     pass 

    def getGlobalAsOverlyLargeList(self): 
     connection=pyodbc.connect(self.connectionString) 
     cursor=connection.cursor() 
     cursor.execute("call MyPackageName.MyClassName_OneGlobal ?","MYGLOBAL") 
     list=[] 
     for row in cursor : 
      list.append((row.NodeValue,row.Sub1,row.Sub2,row.Sub3,row.Sub4,row.Sub5,row.Sub6,row.Sub7,row.Sub8,row.Sub9)) 
     return list 
1

Pythonのキャッシュアクセスには、ODBC接続(テーブルが表示されます)とPythonバインディング(クラスが表示されます)の2種類があります。必要に応じてキャッシュグローバルを反復してPythonバインディングから使用するクラスを作成することができます。キャッシュにPythonバインディングに関するドキュメントがあります。 http://docs.intersystems.com/cache20111/csp/docbook/DocBook.UI.Page.cls?KEY=GBPY