Ich bin auf diese Fragen und Antworten gestoßen, die mir geholfen haben, herauszufinden, warum ich keine where-Klausel für einen ArcPy-Suchcursor verwenden konnte, die den Cursor nur auf die Datensätze beschränken konnte, die einen Unterstrich ( _
) in einem bestimmten Textfeld enthielten .
Als ich es fand, hatte ich bereits ein Code-Snippet entwickelt, um das Problem zu veranschaulichen. Anstatt diesen Aufwand zu verschwenden, habe ich die Lösung hinzugefügt und veröffentliche sie jetzt hier, um möglicherweise einem zukünftigen Besucher mit demselben Problem zu helfen.
Der Test verwendet eine Datei-Geodatabase und wurde unter ArcGIS 10.2.2 für Desktop ausgeführt.
import arcpy
arcpy.CreateFileGDB_management(r"C:\Temp","test.gdb")
arcpy.CreateFeatureclass_management(r"C:\Temp\test.gdb","testFC")
arcpy.AddField_management(r"C:\Temp\test.gdb\testFC","testField","Text")
cursor = arcpy.da.InsertCursor(r"C:\Temp\test.gdb\testFC",["testField"])
cursor.insertRow(["ABCD"])
cursor.insertRow(["A_CD"])
cursor.insertRow(["XYZ"])
cursor.insertRow(["X_Z"])
del cursor
where_clause = "testField LIKE '%C%'"
print("Using where_clause of {0} to limit search cursor to print any values containing the letter C:".format(where_clause))
with arcpy.da.SearchCursor(r"C:\Temp\test.gdb\testFC",["testField"],where_clause) as cursor:
for row in cursor:
print(row[0])
print("This is the expected result :-)")
where_clause = "testField LIKE '%_%'"
print("\nUsing where_clause of {0} to limit search cursor to print any values containing an underscore (_):".format(where_clause))
with arcpy.da.SearchCursor(r"C:\Temp\test.gdb\testFC",["testField"],where_clause) as cursor:
for row in cursor:
print(row[0])
print("This is not what I was hoping for :-(")
where_clause = "testField LIKE '%$_%' ESCAPE '$'"
print("\nUsing where_clause of {0} to limit search cursor to print any values containing an underscore (_):".format(where_clause))
with arcpy.da.SearchCursor(r"C:\Temp\test.gdb\testFC",["testField"],where_clause) as cursor:
for row in cursor:
print(row[0])
print("This is what I was hoping for :-)")
Die Ausgabe ist:
>>>
Using where_clause of testField LIKE '%C%' to limit search cursor to print any values containing the letter C:
ABCD
A_CD
This is the expected result :-)
Using where_clause of testField LIKE '%_%' to limit search cursor to print any values containing an underscore (_):
ABCD
A_CD
XYZ
X_Z
This is not what I was hoping for :-(
Using where_clause of testField LIKE '%$_%' ESCAPE '$' to limit search cursor to print any values containing an underscore (_):
A_CD
X_Z
This is what I was hoping for :-)
>>>
\
Ich glaube, dass dies auch bei Oracle der Fall ist.\_
Wenn Sie nach dem Unterstrich suchen, sollten Sie danach suchen .