Mais

Inserindo valores inteiros na instrução SQL usando ArcPy?


Estou definindo uma função para uso em uma ferramenta ArcGIS que verificará os atributos, detectará erros e obterá a entrada do usuário para retificar esses erros. Quero que a ferramenta selecione e amplie o segmento que está sendo avaliado atualmente, para que eles possam tomar uma decisão informada. É isso que tenho usado e funciona bem. Mas o CONVWGID é a variável que será alterada, e não tenho certeza de como inserir essa variável em uma instrução SQL sem causar erros.

Foi assim que testei a lógica:

def selectzoom (): arcpy.SelectLayerByAttribute_management (Convwks, "NEW_SELECTION", "[CONVWGID] = 10000001") mxd = arcpy.mapping.MapDocument ('CURRENT') df = arcpy.mapping.ListDataFrames (mxd), " 0] df.zoomToSelectedFeatures () arcpy.RefreshActiveView ()

Em seguida, precisei trabalhar a variável na função para aceitar diferentes valores CONVWGID, o que me dá um Runtime / TypeError que eu deveria saber que aconteceria.

Erro de tempo de execução - Traceback (última chamada mais recente): - Arquivo "string", linha 1, no módulo - TypeError: não é possível concatenar os objetos 'str' e 'int'

def selectzoom (convwkgid): delimfield = '"[CONVWGID] =' + convwkgid + '"' arcpy.SelectLayerByAttribute_management (Convwks, "NEW_SELECTION", delimfield) mxd = arcpy.mapping.MapDocument ('CURRENT') df = arcpymap .ListDataFrames (mxd, "Layers") [0] df.zoomToSelectedFeatures () arcpy.RefreshActiveView ()

E quando eu altero a linha delimfield para transformar o inteiro em uma string, ela seleciona todos os atributos em toda a classe de recurso. Não apenas aquele que foi passado por meio da chamada de função.

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

Não sou incrível com SQL e talvez esteja faltando algo básico com esta instrução, mas não consigo descobrir por que não funciona quando estou basicamente fornecendo as mesmas informações:

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

Talvez sejam suas aspas duplas extras no início e no final do seu código:

Digamosconvwkgid= 10000001

'"[CONVWGID] =' + str (convwkgid) + '"'não é igual"[CONVWGID] = 10000001"

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

Em vez disso, tente:

'[CONVWGID] =' + str (convwkgid)


Deixararcpyconstruir a sintaxe correta para você e usar.formato()para que você não precise fazer malabarismos com citações extras:

def selectzoom (convwkgid): fc = "Convwks" field = arcpy.AddFieldDelimiters (fc, "CONVWGID") selection = "{f} = {v}". format (f = field, v = convwkgid) arcpy.SelectLayerByAttribute_management (fc , "NEW_SELECTION", selection) mxd = arcpy.mapping.MapDocument ('CURRENT') df = arcpy.mapping.ListDataFrames (mxd, "Layers") [0] df.zoomToSelectedFeatures () arcpy.RefreshActiveView ()


Assista o vídeo: ArcGIS 9 - 40. MS SQL Server Базовая работа (Outubro 2021).