使该WHERE子句的编写变得容易得多的一件事是使用该AddFieldDelimiters
函数,该函数会自动为字段标识符添加正确的,DBMS特定的分隔符,例如FGDB的双引号和PGDB的括号。
您还需要考虑的另一件事是该值是数字,字符串还是其他数据类型。具体来说,字符串用单引号引起来,而数字则没有。您可以检查字段类型并添加单引号(如果它是字符串字段)。
例如:
import arcpy
def buildWhereClause(table, field, value):
"""Constructs a SQL WHERE clause to select rows having the specified value
within a given field and table."""
# Add DBMS-specific field delimiters
fieldDelimited = arcpy.AddFieldDelimiters(table, field)
# Determine field type
fieldType = arcpy.ListFields(table, field)[0].type
# Add single-quotes for string field values
if str(fieldType) == 'String':
value = "'%s'" % value
# Format WHERE clause
whereClause = "%s = %s" % (fieldDelimited, value)
return whereClause
if __name__ == "__main__":
inputfc = r"C:\input.shp"
outputfc = r"C:\output.shp"
fieldname = "StudyID"
fieldvalue = 101
whereclause = buildWhereClause(inputfc, fieldname, fieldvalue)
arcpy.Select_analysis(inputfc, outputfc, whereclause)
有关上述函数的多值版本,另请参见此答案中的函数。