¿Qué tecnología se usa detrás de los cursores ArcPy?


8

Estoy usando ArcGIS Server 10.0. Tengo un geoprocesamiento que usa arcpy search, actualizar e insertar cursores. Me gustaría saber más sobre la tecnología detrás de estos cursores.

¿Utiliza algún controlador o grupo para conectarse a la base de datos (estoy usando Oracle 11g)?

¿Abre una conexión a la base de datos una vez en la creación del cursor y la cierra cuando se elimina el cursor? ¿Qué pasa con las transacciones?

¿El cursor abre una nueva conexión y transacción a la base de datos cada vez que se actualiza o inserta una fila?

Respuestas:


4

Todo lo que ArcPy hace es proporcionar enlaces al escritorio normal de ArcGIS. Al igual que el escritorio, una vez que tenga una conexión, la mantendrá abierta hasta que ArcGIS la cierre explícitamente (generalmente cuando las ventanas de Python asociadas están cerradas). En cuanto a los controladores, usará los controladores que instaló para ArcGIS para conectarse a su ArcSDE / RDBMS


Tengo un geoprocesamiento que no abre ninguna ventana. ¿Significa que la conexión permanece abierta hasta que se ejecuta la aplicación del myCursor?
yo_haha

1
Si está utilizando los procesos sin ventanas, la conexión permanecerá abierta hasta que se cierre el proceso. ArcGIS es muy agresivo con los diferentes tipos de bloqueos de datos que pone en los datos utilizados, incluidas las conexiones de bases de datos abiertas. Incluso después de eliminar todas las referencias a una conexión o conjunto de datos, ArcGIS puede mantenerlo conectado en segundo plano y bloqueado hasta que se cierre la aplicación con ese bloqueo. Ha sido un gran dolor para los usuarios durante años. El uso de la función del borrará todas las referencias en su aplicación python, pero no necesariamente hará que ArcGIS cierre la conexión de la base de datos.
Lemur

1
La situación que describe parece haber mejorado en 10.1 (vea los comentarios de Jason a esta publicación de blog: sgillies.net/blog/1067/get-with-it )
blah238

@ blah238 el enlace estaba incompleto, así que aquí está la url completa de la publicación mencionada: sgillies.net/2011/02/01/get-with-it.html
Priscilla

3

Debe comprender el concepto de cursores de Python.

Están modelados a partir de los cursores de la base de datos SQL en PEP 249: Python Database API Specification v2.0 para procesar los resultados devueltos por las consultas de la base de datos.

La mayoría de las interfaces de bases de datos Python se adhieren a este estándar: cx_Oracle (Oracle), Psycopg2 (PostgreSQL / PostGIS), MySQLdb (MySQL), sqlite3 (SQLite), etc.

Un cursor permite recuperar una o más filas del resultado, hasta que se hayan procesado todas las filas coincidentes y obtendrá el conjunto de resultados completo a la vez, lo que puede causar problemas de velocidad de procesamiento (rendimiento) ( ¿Hay algo más rápido que un cursor? en ArcGIS para calcular registros? ).

Los cursores de las bases de datos generalmente devuelven una lista de tuplas o una lista de la lista, mientras que los métodos de cursor en ArcGIS devuelven un objeto de enumeración de Python.

Para mejorar la solución del cursor, existen varios contenedores que proporcionan interfaces simplificadas a las bases de datos SQL. Algunos de estos pueden denominarse mapeadores relacionales de objetos u ORM (creación de objetos Pythonic a partir de filas de la base de datos) y otros solo pueden ayudar a generar SQL o proporcionar un soporte de mapeo simple (ver Programación de bases de datos de nivel superior )

Para ArcPy, las soluciones son proporcionadas por, por ejemplo, Sean Gillies ( Get with it ) y otros.

Las otras soluciones geoespaciales (PyQGIS, grass, osgeo.ogr, Pyshp, Rpy, Fiona, PySAL, etc.) no usan cursores, lo que facilita las cosas ...


3
Esto es tangencial y no está relacionado de ninguna manera / específico con los cursores Arcpy, que es lo que preguntó el póster.
Jason Scheirer

2
Lo siento, pero la pregunta es "¿Qué tecnología se utiliza detrás de los cursores de arco?" y la tecnología son los cursores de Python, no ArcPy, y si no los conoce, no puede entender los cursores de ArcPy: es lo mismo.
gen

8
La tecnología detrás de los cursores arcpy es ArcObjects con un contenedor Python. La tecnología detrás arcpy.*Cursores una asignación de Python a las I*Cursorinterfaces de ArcObjects . La comprensión del modelo de geodatabase de ArcObjects y ArcGIS es mucho más útil que el conocimiento de la definición de la interfaz del cursor PEP 249.
Jason Scheirer

1
@JasonScheirer que es básicamente la respuesta correcta a la pregunta por lo que si tuviera que escribir una respuesta real para el mismo efecto que votaría por él :)
blah238

1
Ya publiqué la respuesta al hilo publicado en foros.arcgis.com/threads/…
Jason Scheirer el

0

Como comentó @JasonScheirer:

La tecnología detrás de los cursores arcpy es ArcObjects con un contenedor Python. La tecnología detrás de arcpy. Cursor es una asignación de Python a las interfaces I Cursor de ArcObjects . La comprensión del modelo de geodatabase de ArcObjects y ArcGIS es mucho más útil que el conocimiento de la definición de la interfaz del cursor PEP 249.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.