arcpy查询不起作用

时间:2014-04-28 22:25:12

标签: python select arcgis arcpy

我有一个ArcPy脚本,用于根据查询从属性表中选择所需的属性(E-domE-subdom - 参见下面的示例)。

myQuery = '"VM_POLY" = \'E-dom\'' or '"VM_POLY" = \'E-subdom\''
myInputShapeFile = r"D:\FieldStudy.shp"
myOutputShapefile = r"D:\Endangered.shp"

arcpy.Select_analysis(myInputShapeFile, myOutputShapefile, myQuery)

脚本完成后,只会选择查询中的一种属性。在myInputShapeFile的属性表中,有E-domE-subdom属性,但脚本只会在E-dom中返回myOutputShapefile。我知道问题可能在查询中(myQuery),但我不知道如何解决它。

如果有人可以提供一些指导,我们将不胜感激。

4 个答案:

答案 0 :(得分:2)

难道你的撇号错了吗?

myQuery = '"VM_POLY" = \'E-dom\'' or '"VM_POLY" = \'E-subdom\''
#         ^             ¨      ¨^    ^             ¨         ¨^

(用^标记的撇号划分Python字符串;标有¨的字符串将被转义,因此是字符串的一部分。)

我想你的查询应该是:

myQuery = '"VM_POLY" = \'E-dom\' or "VM_POLY" = \'E-subdom\''
#         ^             ¨      ¨                 ¨         ¨^

因为or不应该由Python解释(逻辑运算符应用于两个字符串),但应该是查询文本的一部分。

答案 1 :(得分:1)

试试这个:

myQuery = '"VM_POLY" = "E-dom" or "VM_POLY"= "E-subdom"'

如前所述,or运算符处理不当,因为它不在您的报价范围内。您还有escape character \,其中可能不需要,但您试图解决您的or运算符已被公开而不是SQL查询的一部分,因此被Python解释器选中代替。

答案 2 :(得分:1)

Python字符串格式化(以及SQL" IN"运算符)使得(稍微)更容易处理复杂的引用语法:

myQuery = "\"{}\" IN ('{}', '{}')".format("VM_POLY", "E-dom", "E-subdom")

答案 3 :(得分:1)

我会使用说明符简化您的查询。

myQuery = ' "%s" = %s or "%s" = %s ' %('VM_POLY','E-dom','VM_POLY','E-subdom')

我知道它起初看起来很古怪,但它确保您的报价和双引号正确定位于需要特定格式的事情。他们最近成了我最好的朋友。

注意:如果你有数字,你想注入字符串,你可以使用%d代替%s。