Welche Technologie wird hinter ArcPy-Cursorn verwendet?

8

Ich verwende ArcGIS Server 10.0. Ich habe eine Geoverarbeitung mit Arcpy-Suche, Aktualisierung und Einfügen von Cursorn. Ich würde gerne mehr über die Technologie hinter diesen Cursorn erfahren.

Verwendet es einen Treiber oder Pool, um eine Verbindung zur Datenbank herzustellen (ich verwende Oracle 11g)?

Öffnet es einmal beim Erstellen des Cursors eine Verbindung zur Datenbank und schließt sie, wenn der Cursor gelöscht wird? Was ist mit Transaktionen?

Öffnet der Cursor jedes Mal, wenn eine Zeile aktualisiert oder eingefügt wird, eine neue Verbindung und Transaktion zur Datenbank?

yo_haha
quelle

Antworten:

4

Alles, was ArcPy tut, ist die Anbindung an den normalen ArcGIS-Desktop. Genau wie beim Desktop bleibt eine Verbindung geöffnet, bis sie von ArcGIS explizit geschlossen wird (normalerweise, wenn die zugehörigen Python-Fenster geschlossen werden). Für die Treiber werden die Treiber verwendet, die Sie für ArcGIS installiert haben, um eine Verbindung zu Ihrem ArcSDE / RDBMS herzustellen

Lemur
quelle
Ich habe eine Geoverarbeitung, die kein Fenster öffnet. Bedeutet dies, dass die Verbindung offen bleibt, bis die Anwendung ausgeführt wird del myCursor?
yo_haha
1
Wenn Sie die fensterlosen Prozesse verwenden, bleibt die Verbindung geöffnet, bis der Prozess geschlossen wird. ArcGIS ist sehr aggressiv gegenüber den verschiedenen Arten von Datensperren, die für alle verwendeten Daten verwendet werden, einschließlich offener Datenbankverbindungen. Auch nach dem Entfernen aller Verweise auf eine Verbindung oder einen Datensatz kann ArcGIS die Verbindung im Hintergrund herstellen und sperren, bis die Anwendung mit dieser Sperre geschlossen wird. Es ist seit Jahren ein großer Schmerz für die Benutzer. Wenn Sie die Del-Funktion verwenden, werden alle Verweise in Ihrer Python-App gelöscht, aber ArcGIS muss die Datenbankverbindung nicht unbedingt schließen.
Lemur
1
Die Situation, die Sie beschreiben, scheint sich um 10.1 verbessert zu haben (siehe Jasons Kommentare zu diesem Blog-Beitrag: sgillies.net/blog/1067/get-with-it )
blah238
@ blah238 Der Link war unvollständig, daher hier die vollständige URL zu dem genannten Beitrag: sgillies.net/2011/02/01/get-with-it.html
Priscilla
3

Sie müssen das Konzept der Python-Cursor verstehen.

Sie sind den SQL-Datenbankcursorn in PEP 249: Python Database API Specification v2.0 nachempfunden , um die von Datenbankabfragen zurückgegebenen Ergebnisse zu verarbeiten.

Die meisten Python-Datenbankschnittstellen entsprechen diesem Standard: cx_Oracle (Oracle), Psycopg2 (PostgreSQL / PostGIS), MySQLdb (MySQL), sqlite3 (SQLite) usw.

Ein Cursor ermöglicht das Abrufen einer oder mehrerer Zeilen des Ergebnisses, bis alle übereinstimmenden Zeilen verarbeitet wurden, und ruft die gesamte Ergebnismenge auf einmal ab, was zu Problemen bei der Verarbeitungsgeschwindigkeit (Leistung) führen kann ( Gibt es etwas schnelleres als einen Cursor? in ArcGIS Datensätze berechnen? ).

Die Datenbankcursor geben im Allgemeinen eine Liste von Tupeln oder eine Liste von Listen zurück, während die Cursormethoden in ArcGIS ein Python-Aufzählungsobjekt zurückgeben.

Um die Cursorlösung zu verbessern, gibt es mehrere Wrapper, die vereinfachte Schnittstellen zu SQL-Datenbanken bieten. Einige davon werden möglicherweise als objektrelationale Mapper oder ORM (Erstellung von Pythonic-Objekten aus Datenbankzeilen) bezeichnet, andere helfen möglicherweise nur beim Generieren von SQL oder bieten einfache Unterstützung für die Zuordnung (siehe Datenbankprogrammierung auf höherer Ebene ).

Für ArcPy werden Lösungen beispielsweise von Sean Gillies ( Get with it ) und anderen bereitgestellt .

Die anderen Geodatenlösungen (PyQGIS, Gras, osgeo.ogr, Pyshp, Rpy, Fiona, PySAL usw.) Verwenden keine Cursor, was die Sache einfacher macht ...

Gen
quelle
3
Dies ist tangential und in keiner Weise mit Arcpy-Cursorn verwandt / spezifisch, worum es im Poster geht.
Jason Scheirer
2
Es tut mir leid, aber die Frage lautet: "Welche Technologie wird hinter Arcpy-Cursorn verwendet?" und die Technologie sind die Python-Cursor, nicht ArcPy, und wenn Sie sie nicht kennen, können Sie die ArcPy-Cursor nicht verstehen: Es ist dasselbe.
Gen
8
Die Technologie hinter arcpy-Cursorn ist ArcObjects mit einem Python-Wrapper. Die Technologie dahinter arcpy.*Cursorist eine Python-Zuordnung zu den I*CursorSchnittstellen von ArcObjects . Ein Verständnis der ArcObjects und des Geodatabase-Modells von ArcGIS ist weitaus nützlicher als die Kenntnis der PEP 249-Cursorschnittstellendefinition.
Jason Scheirer
1
@ JasonScheirer, das ist im Grunde die richtige Antwort auf die Frage. Wenn Sie also eine tatsächliche Antwort mit dem gleichen Effekt schreiben würden, würde ich dafür stimmen :)
blah238
1
Die Antwort auf den Cross- Posting
Jason Scheirer
0

Wie von @JasonScheirer kommentiert:

Die Technologie hinter arcpy-Cursorn ist ArcObjects mit einem Python-Wrapper. Die Technologie hinter arcpy. Cursor ist eine Python-Zuordnung zu den I Cursor-Schnittstellen von ArcObjects . Ein Verständnis der ArcObjects und des Geodatabase-Modells von ArcGIS ist weitaus nützlicher als die Kenntnis der Definition der PEP 249-Cursorschnittstelle.

PolyGeo
quelle