Ich versuche, ein Shapefile zu durchlaufen, indem ich nacheinander jedes Feature auswähle und es in ein temporäres Shapefile kopiere, um es in eine Vereinigungsanalyse einzubeziehen. Ich verwende einen Cursor, um den ID-Namen für jede Funktion zu finden, für die ich einen variablen 'Namen' festlegen möchte. Immer wenn ich versuche, diese Variable als Teil der where-Klausel in arcpy.Select_analysis zu verwenden, erhalte ich eine Fehlermeldung:
ExecuteError: ERROR 999999: Fehler beim Ausführen der Funktion. Eine ungültige SQL-Anweisung wurde verwendet. Eine ungültige SQL-Anweisung wurde verwendet. Fehler beim Ausführen (Auswählen).
Der Code, den ich benutze, ist:
Name = 101
where = "\'\"StudyID\" = \\'"+str(Name)+"\\'\'"
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", where)
Wenn ich es ohne Verwendung der Variablen schreibe:
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", '"StudyID" = \'101\'')
es funktioniert gut
Was muss ich tun, um die Variable in die SQL-Anweisung einzufügen?
quelle
Name
die auf Benutzereingaben beruht?Eine Sache, die das Schreiben von WHERE-Klauseln erheblich erleichtert, ist die Verwendung der
AddFieldDelimiters
Funktion, mit der automatisch die richtigen, DBMS-spezifischen Begrenzer für Feldbezeichner hinzugefügt werden, z. B. doppelte Anführungszeichen für FGDB und eckige Klammern für PGDB.Sie müssen außerdem berücksichtigen, ob es sich bei dem Wert um eine Zahl, eine Zeichenfolge oder einen anderen Datentyp handelt. Insbesondere werden Zeichenfolgen in einfache Anführungszeichen gesetzt, Zahlen hingegen nicht. Sie können den Feldtyp überprüfen und einfache Anführungszeichen hinzufügen, wenn es sich um ein Zeichenfolgenfeld handelt.
Z.B:
Siehe auch die Funktion in dieser Antwort für eine mehrwertige Version der obigen Funktion.
quelle
Versuche dies:
quelle
Ich mag es, dreifache Anführungszeichen zu verwenden. Ich denke, sie sind am einfachsten zu lesen. Beispielsweise,
Je nachdem,
type(name)
ob Sie die'
Umgebung benötigen oder nicht%s
. Für Zahlen benötigen Sie das'
aber nicht für Text.quelle
Für mich funktioniert diese Lösung am besten, da ich sowohl eine Variable für das Interessengebiet als auch Wertkriterien ersetzen kann.
quelle