Intersystems Cache – Kann Python verwendet werden, um direkt auf eine globale oder nur Klassen zuzugreifen, die als SQL-Tabellen ausgesetzt sind?

Kann die Python-Schnittstelle verwendet werden, um direkt über einen intersystems-Cache global zuzugreifen und zu iterieren oder python einfach die gleichen "Tabellen" aussetzen, die ich sehe, wenn ich einen verknüpften Server oder eine ODBC-Verbindung verwende?

  • Python: Unvorhersehbarer Speicherfehler beim Herunterladen großer Dateien
  • Wie kann ich Python-Anwendungen remote aktualisieren?
  • Bibliothek oder Werkzeug, um mehrere Dateien parallel herunterzuladen
  • HTTP Download sehr große Datei
  • Wie man ein paar Dateien gleichzeitig aus ftp in Python herunterlädt
  • Wie kann man Daten aus dem Google-App-Engine herunterladen
  • Python-Pandas - Filterreihen nach Groupby
  • Mapping einer (Lambda) -Funktion auf Listen von Strings fehlschlägt 'float' Objekt nicht iterable
  • Python Lambda's Bindung an lokale Werte
  • Wie man mit Lambda in Python sortiert
  • Python Lambda Verschluss Scoping
  • Serialisierung und Deserialisierung von Lambdas
  • 2 Solutions collect form web for “Intersystems Cache – Kann Python verwendet werden, um direkt auf eine globale oder nur Klassen zuzugreifen, die als SQL-Tabellen ausgesetzt sind?”

    Wenn du direkt auf Globale zugreifen möchtest, kannst du eine gespeicherte Prozedur erstellen, die dies tut. Sie sollten die Sicherheitsimplikationen berücksichtigen, bevor Sie dies tun – es wird alle Daten im globalen jedem mit ODBC-Zugriff aussetzen.

    Hier ist ein Beispiel für eine gespeicherte Prozedur, die die Werte von bis zu 9 globalen Indizes sowie den Wert an diesem Knoten zurückgibt. Sie können es ziemlich einfach ändern, wenn Sie müssen.

    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 ] { SQ=qHandle SQ=$Q(@Q) b IQ="" S Row="",AtEnd=1 Q $$$OK S Depth=$QL(Q) S $LI(Row,1)=$G(@Q) FI=1:1:Depth S $LI(Row,I+1)=$QS(Q,I) FI=Depth+1:1:9 S $LI(Row,I+1)="" S AtEnd=0 S qHandle=Q Quit $$$OK } 

    Um dies von Python zu erreichen, kannst du (mit pyodbc)

     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 

    Es gibt 2 Arten von Cache-Zugriff in Python-ODBC-Verbindung (Sie sehen Ihre Tabellen) und Python-Bindung (Sie sehen Ihre Klassen). Sie können eine Klasse erstellen, die durch Cache-Globals iterieren wird, wenn Sie möchten und dann von Python-Bindung verwenden. Es gibt eine Dokumentation zur Python-Bindung im Cache. http://docs.intersystems.com/cache20111/csp/docbook/DocBook.UI.Page.cls?KEY=GBPY

    Python ist die beste Programmiersprache der Welt.