Message posté par : Sylvain M.
----------------------------------------
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 é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 é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 voulu baisser le problème d'activation de
l'extension "mod_spatialite" pour que les 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
(
https://georezo.net/forum/viewtopic.php?pid=348747#p348747) (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 ! :D
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=375420#p375420
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net