Bonjour à tous (Ia Orana en Polynésien),
C'est la toute première fois que je dois faire une intégration de code SQL dans un script Python via arcpy.
J'ai une sélection classique fonctionne très bien sauf que mon souhait est d'utiliser plusieurs tables issue d'un ArcSDE et là je ne trouve pas encore de solutions similaires.
Pour info, la GDB est sous Postgres et j'utilise un Arcmap 10.3.
L'erreur affichée est :
Merci beaucoup par avance pour vos réponses et votre attention ! ;)Code:
1
2
3
4
5
6
7 Runtime error Traceback (most recent call last): File "<string>", line 1, in <module> File "c:\program files (x86)\arcgis\desktop10.3\arcpy\arcpy\arcobjects\arcobjects.py", line 27, in execute return convertArcObjectToPythonObject(self._arc_object.Execute(*gp_fixargs(args))) AttributeError: ArcSDESQLExecute: StreamExecute Erreur ArcSDE étendue -42 ERREUR: erreur de syntaxe sur ou près de « FROM » LINE 1: ...ent IS NULL THEN '' ELSE d.demembrement END,' - ' FROM otia2...
Sélection classique qui fonctionne :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import arcpy,sys,csv #Environnement Python arcpy.env.overwriteOutput = True workspace = arcpy.env.workspace = r"C:\Users\cmahieux\AppData\Roaming\ESRI\Desktop10.3\ArcCatalog\Connexion à 192.168.106.223.sde" sde_conn = arcpy.ArcSDESQLExecute(r"C:\Users\cmahieux\AppData\Roaming\ESRI\Desktop10.3\ArcCatalog\Connexion à 192.168.106.223.sde") sql = "SELECT i.ile_nom,p.id_parcelle FROM otia2.ile AS i, otia2.parcelle AS p WHERE i.archipel = 'Archipel des Australes' GROUP BY i.ile_nom" sqlresult = sde_conn.execute(sql) for i in sqlresult: print i
Sélection un peu plus complexe :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import arcpy,sys,csv #Environnement Python arcpy.env.overwriteOutput = True workspace = arcpy.env.workspace = r"C:\Users\cmahieux\AppData\Roaming\ESRI\Desktop10.3\ArcCatalog\Connexion à 192.168.106.223.sde" sde_conn = arcpy.ArcSDESQLExecute(r"C:\Users\cmahieux\AppData\Roaming\ESRI\Desktop10.3\ArcCatalog\Connexion à 192.168.106.223.sde") #Code SQL sql = "SELECT i.ile_nom, string_agg(DISTINCT t.terre||' '|| CASE WHEN d.demembrement IS NULL THEN '' ELSE d.demembrement END,' - ' FROM otia2.ile AS i, otia2.demembrement AS d, otia2.terre AS t WHERE i.archipel = 'Archipel des Australes' GROUP BY i.ile_nom" sqlresult = sde_conn.execute(sql) #afficher le resultat for i in sqlresult: print i