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

Holen Sie sich Unterstützung mit KI

Lösen Sie Ihr Problem schnell mit dem Esri Support AI Chatbot.

Beginnen Sie jetzt mit dem Chatten

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden

Unterstützung durch ArcGIS-Experten anfordern

An den technischen Support wenden

Beginnen Sie jetzt mit dem Chatten

Zu Download-Optionen wechseln