如何解决在 arcpy
我正在尝试编写一个包含逻辑查询的 python 命令。我有一系列的表和层,当两个共享变量具有相同的值时,我想对它们运行一个命令。我创建了这些表和层的列表:
pattern = '*Assess*.dbf'
files = []
tables = []
layernames = []
## create the loop element
for dirpath,dirnames,filenames in arcpy.da.Walk(inputFolder):
# append shapefile path to list
for filename in fnmatch.filter(filenames,pattern):
files.append(os.path.join(dirpath,filename))
tables = arcpy.ListTables()
for file in files:
names.append("\"TOWN_ID\" = " + str(int(os.path.basename(file).rstrip(os.path.splitext(file)[1])[1:4])))
layernames.append(str(int(os.path.basename(file).rstrip(os.path.splitext(file)[1])[1:4])))
代码如下:
for layername,table in zip(layernames,tables):
#print layername
#print table
#CF_QueryTool = "C:\\ArcGIS_Temp\\parcel_mosaic\\land_parcels_mosaic.gdb\\cf_QueryTool"
tablelist = [table,"TaxParcels_Layer.{}".format(layername)]
wherecluase = "TaxParcels_Layer.{}.LOC_ID = table.LOC_ID".format(layername)
print tablelist
print wherecluase
arcpy.MakeQueryTable_management(tablelist,"QueryTable.{}".format(layername),"ADD_VIRTUAL_KEY_FIELD","",wherecluase)
print "QueryTable.{} created".format(layername)
问题是,显然我的 wherecluase 有问题,这让我怀疑我是否可以使用表列表来使用类似 table.Locid 的东西。如果我在这里犯了错误,请告诉我。非常感谢!
解决方法
由于“表”既是 SQL 保留关键字,又是文件地理数据库 (*.gdb) 中的无效名称,因此我假设您需要 SQL WHERE 子句中变量 table
的值,而不是单词“桌子。”您需要在 whereclause
格式中添加另一个参数说明符:
>>> table = "myTable"
>>> layername = "myLayer"
>>>
>>> # original code
>>> whereclause = "TaxParcels_Layer.{}.LOC_ID = table.LOC_ID".format(layername)
>>> print(whereclause)
TaxParcels_Layer.myLayer.LOC_ID = table.LOC_ID
>>>
>>> # modified code
>>> whereclause = "TaxParcels_Layer.{}.LOC_ID = {}.LOC_ID".format(layername,table)
>>> print(whereclause)
TaxParcels_Layer.myLayer.LOC_ID = myTable.LOC_ID
>>>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。