Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2026

Jusqu'au 08 décembre 2025, participez à la sélection des conférences !

#1 Wed 29 October 2025 18:12

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 1032

QGIS: Enchainer requetes SQL sur GPKG

Bonsoir à tous,

J'ai une base de données au format GPKG, sur laquelle j'ai une chaine de requêtes SQL pour mettre à jour les données attributaires (des UPDATE principalement).
Dans le gestionnaire de bases de données de QGis, je suis obligé de sélectionner chaque requête une à une pour les exécuter. Si j'en sélectionne plusieurs à la suite, j'ai l'erreur :

QGis a écrit:

You can only execute one statement at a time.


Je pense que pour enchainer les requêtes SQL en une seule fois, le mieux serait de passer par un script Python (?).

Je me débrouille un peu en Python (en dehors de QGis), mais le souci, c'est que je n'arrive pas à activer l'extension "mod_spatialite" pour que les fonctions spatiales du module sqlite3, et mes requêtes, bien qu'attributaires uniquement, concernent des couches spatiales.

J'ai par exemple ce message pour un simple UPDATE :

Python a écrit:

Erreur pour : UPDATE matable SET monchamp = mavaleur... -> no such function: ST_IsEmpty


Comment feriez-vous pour automatiser une chaine de requêtes SQL sur un GPKG, vous ?

Je n'ai jamais utilisé la console Python de QGis (je ne sais pas faire) : peut-être serait-ce plus simple que mon installation Python Windows ?

Merci pour vos conseils !

Dernière modification par Sylvain M. (Wed 29 October 2025 18:13)


Sylvain M.

Hors ligne

 

#2 Mon 03 November 2025 18:10

Alban Kraus
Participant actif
Lieu: Tulle (19)
Date d'inscription: 13 Jan 2022
Messages: 84

Re: QGIS: Enchainer requetes SQL sur GPKG

Bonjour Sylvain,

Personnellement, j'aurais utilisé la ligne de commande et ogr2ogr, qui permet d'exécuter un script SQL sur n'importe quel format de données :

https://gdal.org/en/stable/programs/ogr … gr2ogr-sql

On doit pouvoir l'exécuter en Python aussi.

Hors ligne

 

#3 Mon 03 November 2025 18:13

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 578
Site web

Re: QGIS: Enchainer requetes SQL sur GPKG

Bonsoir,

"Exécution SQL Spatialite" de la boîte à outils de Traitements pourrait répondre à votre besoin.


Jean-Marie
Azimut

Hors ligne

 

#4 Tue 25 November 2025 17:00

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 1032

Re: QGIS: Enchainer requetes SQL sur GPKG

Salut à vous,

Je prends enfin le temps de vous donner des nouvelles sur cette question, et la résolution de mon problème.

Alban Kraus a écrit:

Personnellement, j'aurais utilisé la ligne de commande et ogr2ogr, qui permet d'exécuter un script SQL sur n'importe quel format de données


Malheureusement, sauf erreur de ma part, seuls les SELECT peuvent être exécutés depuis OGR2OGR, pas les UPDATE ou ALTER TABLE.

jmarsac a écrit:

"Exécution SQL Spatialite" de la boîte à outils de Traitements pourrait répondre à votre besoin.


Je n'ai pas réussi à y enchainer mes requêtes SQL en un seul traitement.

Mais finalement, je n'ai pas baissé les bras sur le problème d'activation de l'extension "mod_spatialite" pour activer les fonctions spatiales du module sqlite3 de Python.
Et figurez-vous que j'avais déjà eu ce problème sur mon ancien PC, et que je ne m'en souvenais plus !
Et j'ai retrouvé l'échange où Nicolas Ribot m'avait donné la solution (merci encore à lui !), qui a fonctionné parfaitement aujourd'hui sur mon nouveau PC !

Et du coup, voici donc un exemple de script Python pour exécuter les requêtes d'un fichier SQL sur un GeoPackage :

Code:

import sqlite3

# Chemins GeoPackage et script SQL
gpkg_path = r"D:\Chemin\bdd.gpkg"
sql_script_path = r"D:\Chemin\script.sql"

# Connexion à la base
conn = sqlite3.connect(gpkg_path)
conn.enable_load_extension(True)  # Autorise le chargement d'extensions

# Activation Extension Spatialite
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("mod_spatialite")')
conn.execute('SELECT InitSpatialMetaData();')
cursor = conn.cursor()
print("Extension Spatialite Chargée")

# Lecture du fichier SQL
with open(sql_script_path, 'r', encoding='utf-8') as sql_file:
    sql_script = sql_file.read()

# Exécution des requêtes
for requete in sql_script.split(';'):
    requete = requete.strip()
    if requete:
        try:
            cursor.execute(requete)
            print(f"Exécuté : {requete[:50]}...")
        except Exception as e:
            print(f"Erreur pour : {requete[:50]}... -> {e}")

# Validation des modifications

conn.commit()
conn.close()
print("Traitement terminé.")

Si jamais ça peut être utile à d'autres ! big_smile

Dernière modification par Sylvain M. (Tue 25 November 2025 17:01)


Sylvain M.

Hors ligne

 

#5 Tue 25 November 2025 18:45

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 954
Site web

Re: QGIS: Enchainer requetes SQL sur GPKG

Bonjour,

Malheureusement, sauf erreur de ma part, seuls les SELECT peuvent être exécutés depuis OGR2OGR, pas les UPDATE ou ALTER TABLE.


Pour GDAL, pour faire des UPDATE ou ALTER TABLE en ligne de commande, passez par ogrinfo plutôt que ogr2ogr (cf en anglais https://gis.stackexchange.com/a/347058/638). Attention, vous devrez potentiellement échapper les doubles ou les simples guillemets dans vos requêtes.


Thomas

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo