在 ArcGIS 中将整数值输入 SQL 语句时出现问题
Trouble inputting interger values into an SQL statement within ArcGIS
因此,我正在定义一个用于 ArcGIS 工具的函数,该函数将验证属性、捕获错误并获取用户输入以纠正这些错误。我希望该工具 select 并缩放到当前正在评估的部分,以便他们可以做出明智的决定。这就是我一直在使用的,并且效果很好。但是 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 行以将整数更改为字符串时,它 select 包含整个功能 class 中的所有属性。不仅仅是通过函数调用传递的那个。
delimfield = '"[CONVWGID] = ' + str(convwkgid) + '"'
我对 SQL 并不满意,也许我遗漏了一些基本的东西,但我无法弄清楚为什么当我基本上给它相同的时候它不起作用信息:
"[CONVWGID] = 10000001"
'"[CONVWGID] = ' + str(convwkgid) + '"'
原来是我的单引号中额外包含双引号引起了这个问题。
感谢@Emil Brundage 的帮助!
假设 convwkgid = 10000001
'"[CONVWGID] = ' + str(convwkgid) + '"' doesn't equal "[CONVWGID] = 10000001"
'"[CONVWGID] = ' + str(convwkgid) + '"' would actually be '"CONVWGID] = 10000001"'
试试看:
'[CONVWGID] = ' + str(convwkgid)
因此,我正在定义一个用于 ArcGIS 工具的函数,该函数将验证属性、捕获错误并获取用户输入以纠正这些错误。我希望该工具 select 并缩放到当前正在评估的部分,以便他们可以做出明智的决定。这就是我一直在使用的,并且效果很好。但是 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 行以将整数更改为字符串时,它 select 包含整个功能 class 中的所有属性。不仅仅是通过函数调用传递的那个。
delimfield = '"[CONVWGID] = ' + str(convwkgid) + '"'
我对 SQL 并不满意,也许我遗漏了一些基本的东西,但我无法弄清楚为什么当我基本上给它相同的时候它不起作用信息:
"[CONVWGID] = 10000001"
'"[CONVWGID] = ' + str(convwkgid) + '"'
原来是我的单引号中额外包含双引号引起了这个问题。
感谢@Emil Brundage 的帮助!
假设 convwkgid = 10000001
'"[CONVWGID] = ' + str(convwkgid) + '"' doesn't equal "[CONVWGID] = 10000001"
'"[CONVWGID] = ' + str(convwkgid) + '"' would actually be '"CONVWGID] = 10000001"'
试试看:
'[CONVWGID] = ' + str(convwkgid)