无法将整数值输入ArcGIS

时间:2015-07-13 18:03:39

标签: python sql function arcgis

所以我定义了一个在ArcGIS工具中使用的函数,该函数将验证属性,捕获错误并获取用户输入以纠正这些错误。我希望该工具可以选择并缩放到当前正在评估的细分,以便他们做出明智的决定。这是我一直在使用的,它运作良好。但CONVWGID是将要更改的变量,我不确定如何将该变量输入到SQL语句中而不会导致错误。

这就是我测试逻辑的方式:

def selectzoom():
    arcpy.SelectLayerByAttribute_management(Convwks, "NEW_SELECTION", " [CONVWGID] = 10000001")

    mxd = arcpy.mapping.MapDocument('CURRENT')
    df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
    df.zoomToSelectedFeatures()
    arcpy.RefreshActiveView()

然后我需要将变量放到函数中以接受不同的CONVWGID值,这会给我一个我应该知道会发生的Runtime / TypeError。

运行时错误 - 回溯(最近调用最后一次): - 文件“string”,第1行,在模块中 - TypeError:无法连接'str'和'int'对象

def selectzoom(convwkgid):
    delimfield = '" [CONVWGID] = ' + convwkgid + ' "'
    arcpy.SelectLayerByAttribute_management(Convwks, "NEW_SELECTION", delimfield)

    mxd = arcpy.mapping.MapDocument('CURRENT')
    df = arcpy.mapping.ListDataFrames(mxd, "Layers") [0]
    df.zoomToSelectedFeatures()
    arcpy.RefreshActiveView()

当我改变delimfield行以将整数更改为字符串时,它会选择整个要素类中的所有属性。不只是通过函数调用传递的那个。

delimfield = '"[CONVWGID] = ' + str(convwkgid) + '"'

我对SQL并不感到惊讶,也许我错过了这个语句的基本内容,但是当我基本上给它相同的信息时,我无法弄清楚为什么它不起作用:

"[CONVWGID] = 10000001"
'"[CONVWGID] = ' + str(convwkgid) + '"'

1 个答案:

答案 0 :(得分:0)

事实证明,在我的单引号中额外包含Double引号会引发此问题。

感谢@Emil Brundage的帮助!

让我们说convwkgid = 10000001

'"[CONVWGID] = ' + str(convwkgid) + '"' doesn't equal "[CONVWGID] = 10000001"

'"[CONVWGID] = ' + str(convwkgid) + '"' would actually be '"CONVWGID] = 10000001"'

尝试改为:

'[CONVWGID] = ' + str(convwkgid)