Que tecnologia é usada por trás dos cursores ArcPy?


8

Estou usando o ArcGIS Server 10.0. Eu tenho um geoprocessamento usando pesquisa arcpy, atualizar e inserir cursores. Gostaria de saber mais sobre a tecnologia por trás desses cursores.

Ele usa algum driver ou pool para se conectar ao banco de dados (estou usando o Oracle 11g)?

Ele abre uma conexão com o banco de dados uma vez na criação do cursor e fecha quando o cursor é excluído? E as transações?

O cursor abre uma nova conexão e transação para o banco de dados toda vez que uma linha é atualizada ou inserida?

Respostas:


4

Tudo o que o ArcPy faz é fornecer conectores à área de trabalho normal do ArcGIS. Assim como a área de trabalho, uma vez que você tenha uma conexão, ela a manterá aberta até que seja explicitamente fechada pelo ArcGIS (geralmente quando as janelas python associadas forem fechadas). Quanto aos drivers, ele usará os drivers que você instalou no ArcGIS para conectar-se ao seu ArcSDE / RDBMS.


Eu tenho um geoprocessamento que não abre nenhuma janela. Isso significa que a conexão permanece aberta até a execução do aplicativo del myCursor?
precisa saber é o seguinte

1
Se você estiver usando os processos sem janelas, a conexão permanecerá aberta até que o processo seja fechado. O ArcGIS é muito agressivo com os diferentes tipos de bloqueios de dados que coloca em qualquer dado usado, incluindo conexões de banco de dados abertas. Mesmo depois de remover todas as referências a uma conexão ou conjunto de dados, o ArcGIS pode mantê-lo conectado em segundo plano e bloqueado até que o aplicativo com esse bloqueio seja fechado. Tem sido uma grande dor para os usuários há anos. O uso da função del excluirá todas as referências em seu aplicativo python, mas não necessariamente fará com que o ArcGIS realmente feche a conexão com o banco de dados.
Lemur

1
A situação que você descreve parece ter sido melhorado em 10,1 (ver comentários de Jason para este post: sgillies.net/blog/1067/get-with-it )
blah238

@ blah238 o link estava incompleta, por isso aqui é a URL completa para o cargo mencionado: sgillies.net/2011/02/01/get-with-it.html
Priscilla

3

Você precisa entender o conceito de cursores Python.

Eles são modelados após os cursores do banco de dados SQL na PEP 249: Python Database API Specification v2.0 para processar os resultados retornados pelas consultas ao banco de dados.

A maioria das interfaces de banco de dados Python segue esse padrão: cx_Oracle (Oracle), Psycopg2 (PostgreSQL / PostGIS), MySQLdb (MySQL), sqlite3 (SQLite), etc.

Um cursor permite a recuperação de uma ou mais linhas do resultado, até que todas as linhas correspondentes tenham sido processadas e buscará todo o conjunto de resultados de uma só vez, o que pode causar problemas de velocidade de processamento (desempenho) ( existe algo mais rápido que um cursor no ArcGIS para calcular registros? ).

Os cursores dos bancos de dados geralmente retornam lista de tuplas ou lista de lista, enquanto os métodos de cursor no ArcGIS retornam um objeto de enumeração Python.

Para melhorar a solução do cursor, existem vários wrappers que fornecem interfaces simplificadas para bancos de dados SQL. Alguns deles podem ser chamados de mapeadores relacionais de objetos ou ORM (criação de objetos Pythonic a partir de linhas do banco de dados) e outros podem apenas ajudar a gerar SQL ou fornecer suporte simples ao mapeamento (consulte Programação de banco de dados de nível superior )

Para o ArcPy, as soluções são fornecidas por, por exemplo, Sean Gillies ( Get with it ) e outros.

As outras soluções geoespaciais (PyQGIS, grama, osgeo.ogr, Pyshp, Rpy, Fiona, PySAL, etc.) Não usam cursores, o que facilita as coisas ...


3
Isso é tangencial e não está de forma alguma relacionado / específico aos cursores do Arcpy, e foi sobre isso que o pôster perguntou.
Jason Scheirer

2
Sinto muito, mas a pergunta é "Que tecnologia é usada atrás dos cursores do arco-íris?" e a tecnologia são os cursores do Python, não o ArcPy, e se você não os conhece, não consegue entender os cursores do ArcPy: é a mesma coisa.
gene

8
A tecnologia por trás dos cursores arcpy é o ArcObjects com um wrapper Python. A tecnologia subjacente arcpy.*Cursoré um mapeamento Python para as I*Cursorinterfaces do ArcObjects . Um entendimento do modelo de geodatabase do ArcObjects e do ArcGIS é muito mais útil do que o conhecimento da definição da interface do cursor PEP 249.
Jason Scheirer

1
@JasonScheirer que é basicamente a resposta correta para a pergunta então se você fosse escrever uma resposta real para o mesmo efeito que eu votaria para ele :)
blah238

1
Já postou a resposta para o segmento de cross-postou em forums.arcgis.com/threads/...
Jason Scheirer

0

Como comentado por @JasonScheirer:

A tecnologia por trás dos cursores arcpy é o ArcObjects com um wrapper Python. A tecnologia por trás do arcpy. Cursor é um mapeamento Python para as interfaces I Cursor do ArcObjects . Um entendimento do modelo de geodatabase do ArcObjects e do ArcGIS é muito mais útil do que o conhecimento da definição da interface do cursor PEP 249.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.