CÓMO

Cambiar la expresión SQL de la capa de consulta con Python

Last Published: December 4, 2020

Resumen

Al trabajar en un mapa con varias capas de consulta que hacen referencia a una tabla de base de datos, en algunos casos, la expresión SQL de las capas de consulta requiere una actualización. Por ejemplo, si se cambia el nombre de la tabla de base de datos a la que se hace referencia o se cambia a una nueva tabla de base de datos, la expresión SQL de la capa de consulta se puede actualizar manualmente con el botón "Cambiar consulta" en la ventana Propiedades de capa. Sin embargo, actualizar la expresión manualmente puede resultar tedioso si hay varias capas de consulta. Consulte ArcMap: Modificar una capa de consulta para obtener más información.

Procedimiento

El script de Python y el módulo arcpy.mapping se pueden utilizar para automatizar el proceso de actualización de consultas. En los siguientes pasos se describe cómo hacerlo.

  1. Importar el módulo de ArcPy.
import arcpy
  1. Cree una nueva capa de consulta con las actualizaciones necesarias en la expresión SQL en el 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. Haga referencia a la capa de consulta creada en el paso 2 como origen de la actualización de la expresión 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 el documento de mapa donde implementar las actualizaciones con la función 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. Guarde las ediciones en el documento de mapa existente y borre todas las referencias de variables para borrar todos los archivos .lock.
mxd1.save() del mxd1, mxd2 del MXD

A continuación, se muestra un ejemplo del 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. de artículo: 000018029

Recibir notificaciones y encontrar soluciones a problemas nuevos o comunes

Obtenga respuestas resumidas y soluciones de vídeo de nuestro nuevo chatbot de IA.

Descargar la aplicación de soporte de Esri

Información relacionada

Descubrir más sobre este tema

Obtener ayuda de expertos en ArcGIS

Contactar con el soporte técnico

Descargar la aplicación de soporte de Esri

Ir a opciones de descarga