Estou tentando fazer um loop através de um shapefile, selecionando cada recurso por vez e copiando-o para um shapefile temporário para ser incluído em uma análise de união. Estou usando um cursor para encontrar o nome do ID de cada recurso que estou definindo como um 'Nome' variável. Sempre que tento usar essa variável como parte da cláusula where no arcpy.Select_analysis, recebo um erro:
ExecuteError: ERRO 999999: Erro ao executar a função. Uma instrução SQL inválida foi usada. Uma instrução SQL inválida foi usada. Falha ao executar (Selecionar).
O código que estou usando é:
Name = 101
where = "\'\"StudyID\" = \\'"+str(Name)+"\\'\'"
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", where)
Se eu digitar sem usar as variáveis:
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", '"StudyID" = \'101\'')
Funciona bem
O que eu preciso fazer para ajustar a variável na instrução sql?
arcpy
arcgis-10.0
select
error-999999
where-clause
Flo Harrison
fonte
fonte
Name
vier da entrada do usuário?Uma coisa que facilita muito a escrita das cláusulas WHERE é usar o método
AddFieldDelimiters
função, que adiciona automaticamente os delimitadores corretos específicos do DBMS para identificadores de campo, como aspas duplas para FGDB e colchetes para PGDB.A outra coisa que você deve considerar é se o valor é um número, sequência ou outro tipo de dados. Especificamente, as seqüências de caracteres são agrupadas em aspas simples, enquanto os números não. Você pode verificar o tipo de campo e adicionar aspas simples, se for um campo de sequência.
Por exemplo:
Consulte também a função nesta resposta para obter uma versão com vários valores da função acima.
fonte
Tente o seguinte:
fonte
Eu gosto de usar aspas triplas. Eu acho que eles são os mais fáceis de ler. Por exemplo,
Dependendo do
type(name)
que você pode ou não pode precisar da'
volta%s
. Para números, você precisa do'
texto, mas não do texto.fonte
Para mim, esta solução funciona melhor, pois posso substituir uma variável pelo campo de interesse e pelos critérios de valor.
fonte