Instrução

Alterar a expressão SQL da camada de consulta usando Python

Last Published: December 4, 2020

Resumo

Ao trabalhar em um mapa com várias camadas de consulta que fazem referência a uma tabela de banco de dados, em alguns casos, a expressão SQL das camadas de consulta requer uma atualização. Por exemplo, se a tabela de banco de dados referenciada for renomeada ou trocada para uma nova tabela de banco de dados, a expressão SQL da camada de consulta pode ser atualizada manualmente usando o botão 'Alterar Consulta' na janela Propriedades da Camada. No entanto, atualizar a expressão manualmente pode ser entediante se houver várias camadas de consulta. Consulte ArcMap: Modificar uma camada de consulta para mais informações.

Procedimento

O script Python e o módulo arcpy.mapping podem ser usados ​​para automatizar o processo de atualização da consulta. As etapas a seguir descrevem como fazer isso.

  1. Importar o módulo ArcPy.
import arcpy
  1. Crie uma nova camada de consulta com as atualizações necessárias para a expressão SQL no documento de mapa existente.
sdeworkspace_path = r"D:\Connections\sample.sde" querypath = "Select * from sample where NAME = 'Test'" arcpy.MakeQueryLayer_management(sdeworkspace_path, "New_Sample_Layer", querypath, "OBJECTID", "POLYGON", "3735") MXD = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Sample_Query.mxd") DF = arcpy.mapping.ListDataFrames(MXD)[0] output_layer = arcpy.mapping.Layer("New_Sample_Layer") arcpy.mapping.AddLayer(DF, output_layer, "AUTO_ARRANGE") MXD.save()
  1. Faça referência à camada de consulta criada na Etapa 2 como a fonte para a atualização da expressão SQL.
mxd2 = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Sample_Query.mxd") df2 = arcpy.mapping.ListDataFrames(mxd2, "Layers")[0] sourceLayer = arcpy.mapping.ListLayers(mxd2, "New_Sample_Layer", df2)[0]
  1. Especifique o documento do mapa para implementar as atualizações usando a função arcpy.mapping.UpdateLayer().
mxd1 = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Sample_Query_1.mxd") df = arcpy.mapping.ListDataFrames(mxd1, "Layers")[0] updateLayer = arcpy.mapping.ListLayers(mxd1, "Sample_Query", df)[0] arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, False)
  1. Salve as edições no documento de mapa existente e limpe todas as referências de variáveis ​​para limpar todos os arquivos .lock.
mxd1.save() del mxd1, mxd2 del MXD

A seguir está um exemplo do script completo:

import arcpy sdeworkspace_path = r"D:\Connections\GEODATA1051@gisadmin.sde" querypath = "Select * from GISADMIN.Test_Parks where NAME = 'Test'" arcpy.MakeQueryLayer_management(sdeworkspace_path, "New_Parks_Layer", querypath, "OBJECTID_1", "POLYGON", "3735") MXD = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Parks\Parks_Query.mxd") DF = arcpy.mapping.ListDataFrames(MXD)[0] output_layer = arcpy.mapping.Layer("New_Parks_Layer") arcpy.mapping.AddLayer(DF, output_layer, "AUTO_ARRANGE") MXD.save() mxd2 = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Parks\Parks_Query.mxd") df2 = arcpy.mapping.ListDataFrames(mxd2, "Layers")[0] sourceLayer = arcpy.mapping.ListLayers(mxd2, "New_Parks_Layer", df2)[0] mxd1 = arcpy.mapping.MapDocument(r"D:\Data\Mxd\Parks\Parks_Query1.mxd") df = arcpy.mapping.ListDataFrames(mxd1, "Layers")[0] updateLayer = arcpy.mapping.ListLayers(mxd1, "Parks_Query", df)[0] arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, False) mxd1.save() del mxd1, mxd2 del MXD

ID do Artigo: 000018029

Receba notificações e encontre soluções para problemas novos ou comuns

Obtenha respostas resumidas e soluções de vídeo do nosso novo chatbot de IA.

Baixe o Aplicativo de Suporte da Esri

Informações Relacionadas

Descubra mais sobre este tema

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Baixe o Aplicativo de Suporte da Esri

Ir para as opções de download