J'essaie de parcourir un fichier de formes, en sélectionnant chaque fonctionnalité à son tour et en la copiant dans un fichier de formes temporaire pour l'inclure dans une analyse d'union. J'utilise un curseur pour trouver le nom d'ID de chaque fonctionnalité que je définis sur un 'Nom' variable. Chaque fois que j'essaie d'utiliser cette variable dans le cadre de la clause where dans arcpy.Select_analysis, j'obtiens une erreur:
ExecuteError: ERREUR 999999: erreur lors de l'exécution de la fonction. Une instruction SQL non valide a été utilisée. Une instruction SQL non valide a été utilisée. Échec de l'exécution (Select).
Le code que j'utilise est:
Name = 101
where = "\'\"StudyID\" = \\'"+str(Name)+"\\'\'"
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", where)
Si je le tape sans utiliser les variables:
arcpy.Select_analysis("C:\\input.shp", "C:\\output.shp", '"StudyID" = \'101\'')
ça fonctionne bien
Que dois-je faire pour adapter la variable à l'instruction sql?
la source
Name
provient d'une entrée utilisateur?Une chose qui facilite beaucoup l'écriture des clauses WHERE est d'utiliser la
AddFieldDelimiters
fonction, qui ajoute automatiquement les délimiteurs spécifiques au SGBD pour les identificateurs de champ, tels que les guillemets doubles pour FGDB et les crochets pour PGDB.L'autre chose que vous devez considérer est de savoir si la valeur est un nombre, une chaîne ou un autre type de données. Plus précisément, les chaînes sont entourées de guillemets simples, contrairement aux nombres. Vous pouvez vérifier le type de champ et ajouter des guillemets simples s'il s'agit d'un champ de chaîne.
Par exemple:
Voir également la fonction dans cette réponse pour une version à plusieurs valeurs de la fonction ci-dessus.
la source
Essaye ça:
la source
J'aime utiliser des guillemets triples. Je pense qu'ils sont les plus faciles à lire. Par exemple,
En fonction de la,
type(name)
vous pouvez ou non avoir besoin de l''
environnement%s
. Pour les chiffres, vous avez besoin du'
mais pas du texte.la source
Pour moi, cette solution fonctionne le mieux car je peux substituer à la fois une variable au champ d'intérêt et des critères de valeur.
la source