结构化查询语言 (SQL) 是一种功能强大的语言,可定义一个或多个由属性、运算符和运算组成的判定条件。例如,假设有一份客户数据表,要在其中查找去年花费超过 $50,000 且业务类型是餐馆的客户。则可以使用以下表达式选择客户:“Sales > 50000 AND Business_type = 'Restaurant'”。
当为更新或搜索游标指定查询时,仅返回满足该查询的记录。一个 SQL 查询代表了一个可使用 SQL SELECT 语句对 SQL 数据库中的表进行的单个表查询子集。用于指定 WHERE 子句的语法与保存数据的基础数据库的语法相同。
下例将过滤搜索游标的行以得到仅属于特定道路类的道路:
import arcpy
fc = "D:/St_Johns/data.gdb/roads"
# Create a search cursor using an SQL expression
#
cursor = arcpy.da.SearchCursor(fc, ("roadclass", "name"), """"roadclass" = 2""")
for row in cursor:
# Print the name of the residential road
#
print(row[1])
在 SQL 表达式中使用 AddFieldDelimiters
SQL 表达式中使用的字段分隔符因所查询数据的格式而异。例如,文件地理数据库和 shapefile 使用双引号 (" "),个人地理数据库使用方括号 ([ ]),而 ArcSDE 地理数据库不使用字段分隔符。AddFieldDelimiters 函数可免去一些为确保与 SQL 表达式一起使用的字段分隔符的正确性而进行的推测过程。下例对上述示例进行了扩展,以为 SQL 表达式添加正确的字段分隔符。
import arcpy
fc = "D:/St_Johns/data.gdb/roads"
fieldname = "roadclass"
# Create field name with the proper delimiters
#
whereclause = """{} = 2""".format(arcpy.AddFieldDelimiters(fc, fieldname))
# Create a search cursor using an SQL expression
#
cursor = arcpy.da.SearchCursor(fc, ("roadclass", "name"), whereclause)
for row in cursor:
# Print the name of the residential road
print(row[1])