Estoy tratando de recorrer un archivo de formas, seleccionando cada característica a su vez y copiándolas en un archivo de formas temporal para incluirlas en un análisis de unión. Estoy usando un cursor para encontrar el nombre de ID para cada función que estoy configurando en un 'Nombre' variable. Cada vez que intento usar esta variable como parte de la cláusula where en arcpy.Select_analysis obtengo un error:
ExecuteError: ERROR 999999: Error al ejecutar la función. Se utilizó una instrucción SQL no válida. Se utilizó una instrucción SQL no válida. Error al ejecutar (Seleccionar).
El código que estoy usando es:
Name = 101
where = "\'\"StudyID\" = \\'"+str(Name)+"\\'\'"
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", where)
Si lo escribo sin usar las variables:
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", '"StudyID" = \'101\'')
funciona bien
¿Qué debo hacer para ajustar la variable en la instrucción sql?
fuente
Name
proviene de la entrada del usuario?Una cosa que hace que escribir cláusulas WHERE sea mucho más fácil es usar la
AddFieldDelimiters
función, que agrega automáticamente los delimitadores correctos, específicos de DBMS para identificadores de campo, como comillas dobles para FGDB y corchetes para PGDB.La otra cosa que debe considerar es si el valor es un número, una cadena u otro tipo de datos. Específicamente, las cadenas se envuelven entre comillas simples, mientras que los números no. Puede verificar el tipo de campo y agregar comillas simples si es un campo de cadena.
P.ej:
Consulte también la función en esta respuesta para obtener una versión de varios valores de la función anterior.
fuente
Prueba esto:
fuente
Me gusta usar comillas triples. Creo que son los más fáciles de leer. Por ejemplo,
Dependiendo de lo
type(name)
que pueda o no necesite el'
alrededor%s
. Para los números, necesita el'
texto pero no el texto.fuente
Para mí, esta solución funciona mejor, ya que puedo sustituir tanto una variable para el campo de interés como los criterios de valor.
fuente