Development #39612
arcgis: supporter des paramètres à la requête where
0%
Description
La requête where est une expression SQL, le souci est qu'il faudrait gérer le quoting des chaînes SQL (double des simple quote) et l'interpolation pour bien faire, i.e. pour obtenir
WHERE x LIKE 'truc''muche'
il faudrait pouvoir passer
where=x+LIKE+%25s¶m=truc'muche
et calculer le where via une expression du genre:
format_sql(request.GET['where'], *request.GET.getlist('param'))
Fichiers
Demandes liées
Historique
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Sujet changé de arcgis: supporter des paramètre à la requête where à arcgis: supporter des paramètres à la requête where
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier 0001-arcgis-handler-parameters-in-where-clauses-39612.patch 0001-arcgis-handler-parameters-in-where-clauses-39612.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Ça s'utilise comme ceci :
/arcgis/test/mapservice-query?where=adress+LIKE+%s&where-param=RUE+D'ANNAM
si on utlise %d c'est implicitement converti en entier, j'ai pas fait les float si vous pensez que ça pourrait être utile je le ferai aussi.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Benjamin Dauvergne a écrit :
Ça s'utilise comme ceci :
[...]
si on utlise %d c'est implicitement converti en entier, j'ai pas fait les float si vous pensez que ça pourrait être utile je le ferai aussi.
À noter que ça va péter toutes les clauses where qui utiliseraient actuellement un % dans leur expression (genre LIKE '%whatever%'). Si c'est gênant je peux aussi prévoir un nouveau paramètre genre where-interpolate
qui prendrait la place de where quand il est là.
Mis à jour par Thomas Noël il y a environ 4 ans
Beaucoup d'existant sur Cannes https://demarches-mairie-de-cannes.test-demarches.sictiam.fr/backoffice/workflows/data-sources/ et pas mal de where dans le lot, pour l'interrogation du cadastre... et aucune envie de jouer là dedans :
42: {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=adresse%20like%20%27%{{form_var_recherche_adresse|default:"XYZXYZ"|upper|urlencode}}%%27&template=%7B%7Battributes.adresse%7Csafe%7D%7D+—+%7B%7Battributes.codepost|default:""%7D%7D+%7B%7Battributes.sectpost|default:""%7D%7D&id_template=%7B%7Battributes.ident%7D%7D&orderByFields=nomvoie,numero_num&full=on 45: {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=1&folder=geocannes&service=GEOCANNES_RU&where=id_parc=%27{% if "adresse" in form_var_methode %}{{ form_var_parcelle_adresse }}{% elif "cart" in form_var_methode %}{{ form_var_parcelle_carte }}{% else %}{{ form_var_parcelle_manuelle }}{% endif %}%27 49: {% if form_var_num_voie %}{% load l10n %}{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%20{{form_var_num_voie}}%20and%20adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.quartier%7D%7D&full=on{% else %}{% load l10n %}{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%200%20and%20adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.quartier%7D%7D&full=on{% endif %} 50: {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%200%20AND%20adresse%20like%20%27%{{form_var_recherche_adresse|default:"XYZXYZ"|upper}}%%27&template=%7B%7Battributes.nomvoie%7Csafe%7D%7D&orderByFields=nomvoie&full=on 51: {% if form_var_num_voie %}{% load l10n %}{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%20{{form_var_num_voie}}%20and%20adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.secteur%7D%7D&full=on{% else %}{% load l10n %}{{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=numero_num%20=%200%20and%20adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.secteur%7D%7D&full=on{% endif %} 52: {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=adresse%20like%20%27%{{form_var_voie}}%%27&template=%7B%7Battributes.numero_num%7D%7D&orderByFields=numero_num&full=on 53: {{ passerelle_url }}arcgis/geocannes/mapservice-query?layer=0&folder=geocannes&service=GEOCANNES_Adresse_reference&where=adresse%20like%20%27%{{form_var_recherche_adresse|default:"XYZXYZ"|upper}}%%27&template=%7B%7Battributes.adresse%7D%7D+—+%7B%7Battributes.quartier%7D%7D+—+%7B%7Battributes.codepost|default:""%7D%7D+%7B%7Battributes.sectpost|default:""%7D%7D&id_template=%7B%7Battributes.ident%7D%7D&orderByFields=nomvoie,numero_num&full=on
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Ça tombe bien c'est pour Cannes que c'est développé.
Mis à jour par Thomas Noël il y a environ 4 ans
Benjamin Dauvergne a écrit :
Ça tombe bien c'est pour Cannes que c'est développé.
Arf. Et donc pour les where là, c'est bon ? J'ai du mal.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Thomas Noël a écrit :
Benjamin Dauvergne a écrit :
Ça tombe bien c'est pour Cannes que c'est développé.
Arf. Et donc pour les where là, c'est bon ? J'ai du mal.
Non justement le but c'est de tous les réécrire proprement, là ça ne marche pas avec les apostrophes (ticket lié).
PS: maintenant avec une nuit de réflexion je me dis que la bonne solution ce serait plutôt un système de query comme csvdatasource, ça éviterait aussi de passer des bouts de template Django illisibles dans l'URL.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Lié à Support #39622: arcgis: pouvoir définir des requêtes ajouté
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Lié à Development #27782: arcgis : ajouter un système de map-service-query pré-remplie ajouté
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Statut changé de Solution proposée à Rejeté