HOW TO

Ändern des SQL-Ausdrucks für den Abfrage-Layer mit Python

Last Published: December 4, 2020

Zusammenfassung

Beim Arbeiten mit einer Karte mit mehreren Abfrage-Layern, die eine Datenbanktabelle referenzieren, kann es vorkommen, dass der SQL-Ausdruck der Abfrage-Layer eine Aktualisierung erfordert. Wenn die referenzierte Datenbanktabelle beispielsweise umbenannt wurde oder wenn zu einer anderen Datenbanktabelle gewechselt wurde, kann der SQL-Ausdruck des Abfrage-Layers mithilfe der Schaltfläche "Abfrage ändern" im Fenster "Layer-Eigenschaften" manuell aktualisiert werden. Wenn mehrere Abfrage-Layer vorhanden sind, ist das manuelle Aktualisieren des Ausdrucks jedoch zeitaufwendig. Weitere Informationen finden Sie unter ArcMap: Ändern eines Abfrage-Layers.

Vorgehensweise

Mit dem Python-Skript und dem arcpy.mapping-Modul kann der Prozess zur Aktualisierung der Abfrage automatisiert werden. In den folgenden Schritten wird die Vorgehensweise beschrieben.

  1. Importieren Sie das ArcPy-Modul.
import arcpy
  1. Erstellen Sie einen neuen Abfrage-Layer mit den erforderlichen Aktualisierungen für den SQL-Ausdruck im vorhandenen Kartendokument.
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. Referenzieren Sie den in Schritt 2 erstellten Abfrage-Layer als Quelle für die Aktualisierung des SQL-Ausdrucks.
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. Geben Sie mithilfe der Funktion "arcpy.mapping.UpdateLayer()" das Kartendokument zum Implementieren der Aktualisierungen an.
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. Speichern Sie die Änderungen am vorhandenen Kartendokument, und löschen Sie alle Variablenbezüge, um alle LOCK-Dateien zu löschen.
mxd1.save() del mxd1, mxd2 del MXD

Im Folgenden ist ein Beispiel für das gesamte Skript dargestellt:

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

Artikel-ID: 000018029

Benachrichtigungen erhalten und Lösungen für neue oder häufige Probleme finden

Unser neuer KI-Chatbot stellt zusammengefasste Antworten und Videolösungen für Sie bereit.

Esri Support App herunterladen

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden

Unterstützung durch ArcGIS-Experten anfordern

An den technischen Support wenden

Esri Support App herunterladen

Zu Download-Optionen wechseln