我有一个ArcPy脚本,用于根据查询从属性表中选择所需的属性(E-dom
和E-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-dom
和E-subdom
属性,但脚本只会在E-dom
中返回myOutputShapefile
。我知道问题可能在查询中(myQuery
),但我不知道如何解决它。
如果有人可以提供一些指导,我们将不胜感激。
答案 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。