Quelle technologie est utilisée derrière les curseurs ArcPy?

8

J'utilise ArcGIS Server 10.0. J'ai un géotraitement utilisant la recherche arcpy, la mise à jour et l'insertion de curseurs. J'aimerais en savoir plus sur la technologie derrière ces curseurs.

Utilise-t-il un pilote ou un pool pour se connecter à la base de données (j'utilise Oracle 11g)?

Ouvre-t-il une connexion à la base de données une fois lors de la création du curseur et la ferme-t-il lorsque le curseur est supprimé? Et les transactions?

Le curseur ouvre-t-il une nouvelle connexion et transaction à la base de données chaque fois qu'une ligne est mise à jour ou insérée?

yo_haha
la source

Réponses:

4

ArcPy ne fait que fournir des connexions au bureau ArcGIS normal. Tout comme le bureau une fois que vous avez une connexion, il le gardera ouvert jusqu'à ce qu'il soit explicitement fermé par ArcGIS (généralement lorsque les fenêtres python associées sont fermées). Quant aux pilotes, ils utiliseront les pilotes que vous avez installés pour ArcGIS pour vous connecter à votre ArcSDE / RDBMS

Maki
la source
J'ai un géotraitement qui n'ouvre aucune fenêtre. Cela signifie-t-il que la connexion reste ouverte jusqu'à ce que l'application s'exécute del myCursor?
yo_haha
1
Si vous utilisez les processus sans fenêtre, la connexion restera ouverte jusqu'à la fermeture du processus. ArcGIS est très agressif avec les différents types de verrous de données qu'il met sur toutes les données utilisées, y compris les connexions de base de données ouvertes. Même après avoir supprimé toutes les références à une connexion ou à un ensemble de données, ArcGIS peut le garder connecté en arrière-plan et verrouillé jusqu'à ce que l'application avec ce verrou soit fermée. Cela a été une douleur majeure pour les utilisateurs depuis des années. L'utilisation de la fonction del supprimera toutes les références dans votre application python, mais cela n'entraînera pas nécessairement la fermeture effective de la connexion à la base de données par ArcGIS.
Lemur
1
La situation que vous décrivez semble avoir été améliorée à 10.1 (voir les commentaires de Jason sur ce blog: sgillies.net/blog/1067/get-with-it )
blah238
@ blah238 le lien était incomplet, voici donc l'url complète du message mentionné: sgillies.net/2011/02/01/get-with-it.html
Priscilla
3

Vous devez comprendre le concept des curseurs Python.

Ils sont modélisés d'après les curseurs de base de données SQL dans PEP 249: Spécification de l'API de base de données Python v2.0 pour traiter les résultats renvoyés par les requêtes de base de données.

La majorité des interfaces de base de données Python adhèrent à cette norme: cx_Oracle (Oracle), Psycopg2 (PostgreSQL / PostGIS), MySQLdb (MySQL), sqlite3 (SQLite), etc.

Un curseur permet de récupérer une ou plusieurs lignes du résultat, jusqu'à ce que toutes les lignes correspondantes aient été traitées et qu'il récupère l'ensemble des résultats en même temps, ce qui peut entraîner des problèmes de vitesse de traitement (performances) ( Y a-t-il quelque chose de plus rapide qu'un curseur dans ArcGIS pour calculer les enregistrements? ).

Les curseurs de bases de données renvoient généralement une liste de tuples ou une liste de listes tandis que les méthodes de curseur dans ArcGIS renvoient un objet d'énumération Python.

Pour améliorer la solution du curseur, plusieurs wrappers qui fournissent des interfaces simplifiées aux bases de données SQL existent. Certains d'entre eux peuvent être appelés mappeurs relationnels d'objets ou ORM (création d'objets Pythonic à partir de lignes de base de données) et d'autres peuvent uniquement aider à générer du SQL ou fournir un support de mappage simple (voir Programmation de base de données de niveau supérieur )

Pour ArcPy, les solutions sont fournies, par exemple, par Sean Gillies ( Get with it ) et d'autres.

Les autres solutions géospatiales (PyQGIS, grass, osgeo.ogr, Pyshp, Rpy, Fiona, PySAL, etc.) n'utilisent pas de curseurs, ce qui facilite les choses ...

gène
la source
3
Ceci est tangentiel et n'a aucun rapport avec / spécifique aux curseurs Arcpy, c'est ce que l'affiche a demandé.
Jason Scheirer
2
Je suis désolé mais la question est "Quelle technologie est utilisée derrière les curseurs arcpy?" et la technologie, ce sont les curseurs Python, pas ArcPy, et si vous ne les connaissez pas, vous ne pouvez pas comprendre les curseurs ArcPy: c'est la même chose.
gène
8
La technologie derrière les curseurs arcpy est ArcObjects avec un wrapper Python. La technologie derrière arcpy.*Cursorest un mappage Python aux I*Cursorinterfaces d'ArcObjects . Une compréhension d'ArcObjects et du modèle de géodatabase d'ArcGIS est beaucoup plus utile qu'une connaissance de la définition de l'interface du curseur PEP 249.
Jason Scheirer
1
@JasonScheirer qui est fondamentalement la bonne réponse à la question, donc si vous deviez écrire une réponse réelle au même effet, je voterais pour elle :)
blah238
1
Vous avez
Jason Scheirer
0

Comme l'a commenté @JasonScheirer:

La technologie derrière les curseurs arcpy est ArcObjects avec un wrapper Python. La technologie derrière arcpy. Cursor est un mappage Python avec les interfaces I Cursor d' ArcObjects . Une compréhension d'ArcObjects et du modèle de géodatabase d'ArcGIS est beaucoup plus utile qu'une connaissance de la définition de l'interface du curseur PEP 249.

PolyGeo
la source