Message posté par : myh89
----------------------------------------
Bonjour Santanna et toute personne qui accepterait de m’aider, merci déjà aux personnes
qui l’on fait par d’autres canaux.
J’ai essayé d’utiliser le modèle Builder mais je n’ai pas trouvé ce qu’il me fallait.
J'ai aussi utilisé l'historique du menu Traitement pour voir comment
s'écrivent les commandes que j'exécute mais il manque certaines interactions.
Je reexplique donc ce que j’ai fait :
1- La syntaxe pour ouvrir un projet Qgis existant depuis un répertoire existant ne
m’intéresse pas pour l’instant, on considère le projet ouvert et les couches chargée dont
celle en MySQL.
J’ai juste noté comme variables :
2 - chemin_projet_source = r'C:/Usersxxxxx/(..)/' : j'y ai les droits en
écriture
3 - Pour le nom du shapefile de destination qui change toutes les 30 minutes, j'ai
écrit ça
from datetime import datetime
datajour = str(datetime.now())
# pour raccourcir le nom et l’heure, #jusqu’ à l’heure
datajourH = datajour[:13]
#il faut couper pour ne pas avoir les 2 points dans le nom du fichier
minutes = datajour[15:16]
couche_resultat = 'POQ du ' + datajourH + 'h' + minutes + '.shp'
4- Pour gérer le MySQL
uri = 'MySQL:nom_de_ma_base,host=adresse_IP,user=mon_nom
t,password=mon_pass|layername=nom_de_table'
5- Pour trouver le nom des couches en faisant attention à l’indentation
for id, layer in QgsProject.instance().mapLayers().items():
print(layer.name())
# Attribuer ce nom – attention c’est seulement le nom
nom_couche_source = ('nom de la base _ nom de la table')
si on l’attribue directement et qu’on cherche le type on a une liste et non pas une vector
layer
couche_source = QgsProject.instance().mapLayersByName ('nom de la base _ nom de la
table')
type(couche_source)
<class 'list'>
pour l’attribuer en manuel on peut faire ça
couche_source = iface.activeLayer()
couche_source.id()xxxxxxxxx5ecf14a0'
couche_source.type()
<QgsMapLayerType.VectorLayer: 0>
Mais sans utiliser active Layer ??
5 - Et donc je bloque toujours pour enregistrer ma table MySQL en une nouvelle couche
shapefile (avec le nom de cla couche_resultat) en ayant essayé
5A QgsVectorFileWriter : les arguments ne sont pas les bons
5B processing.run("native:savefeatures",
{'INPUT':'MySQL:sig,host=IP,user=xxxx,password=xxxx,tables=xxxx|layername=xxxs|geometrytype=Point','OUTPUT':'C:/UserxxxxxL/','LAYER_NAME':'xxxxx','DATASOURCE_OPTIONS':'','LAYER_OPTIONS':''})
en 5B ça me crée un faux Geopackage sans nom (juste le fichier avec l'extension gpkg),
j'ai essayé de mettre ESRI Shapefile dans DataSource ou Dans layer Options, même
résultat...
Bref pour l'instant ça n'est pas la gloire, et je ne comprends pas pourquoi Qgis
et MySQL s'aiment aussi peu (même remarque de notre prestataire..)
Merci d'avance pour votre aide. Je continue aussi avec ChatGPT qui me donne plein de
syntaxes alternatives qui ne fonctionnent pas. Alors que quand je fais les manipulations
en manuel ça fonctionne. L'idée du 5B m'est venu en utilisant l'historique des
traitements, mais il manque le moment où ça demande si on veut faire un fichier
temporaire, celui pour le CRS, et celui pour le type de ficher (gpkg par défaut, shapefile
ensuite, etc)
MERCI MERCI.
M. Huant
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=361773#p361773
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net