Suite

Comment obtenir le nom de la base de données PostGIS à partir de la couche QGIS?


J'écris un script de traitement personnalisé qui doit savoir dans quelle connexion de base de données réside une couche vectorielle. Je ne trouve nulle part dans l'API une fonction pour renvoyer ces informations à partir d'une couche. Donc je suppose que j'ai deux questions :

  1. Existe-t-il une fonction Python (de qgis.core ou des outils de traitement) qui renvoie facilement des éléments tels que le nom de la base de données, le schéma, etc. d'une couche donnée ?
  2. Sinon, dois-je analyser l'URI de la couche ? Comment puis-je obtenir ces informations ?

J'ai fini par écrire un petit module pour extraire des informations de la chaîne renvoyée par source() :

import re class LayerDbInfo: def __init__(self, layerInfo): if layerInfo[:6] == 'dbname': layerInfo = layerInfo.replace('",'"') vals = dict(re.findall('( S+)="?(.*?)"? ',layerInfo)) self.dbName = str(vals['dbname']) self.key = str(vals['key']) self.user = str(vals ['user']) self.password = str(vals['password']) self.srid = int(vals['srid']) self.type = str(vals['type']) self.host = str (vals['host']) self.port = int(vals['port']) # nécessite un traitement supplémentaire pour obtenir le nom et le schéma de la table table = vals['table'].split('.') self.schemaName = table[0].strip('"') self.tableName = table[1].strip('"') else: augmenter def getDBName(self): retourner self.dbName def getHost(self): retourner self.host def getPort(self): retourne self.port def getKey(self): retourne self.key def getUser(self): retourne self.user def getPassword(self): retourne self.password def getSRID(self): retourne self.srid def getType(self): retourne self.type def getSchema(self): retourne self.schemaName def getTable(self): retourne self.tableName

Je pense que vous pouvez utiliser le code suivant pour obtenir des informations sur la source de votre couche. Sélectionnez un calque dans la fenêtre des calques et saisissez le code dans la console Python :

layer = qgis.utils.iface.activeLayer() imprimer layer.source()

Vous devriez recevoir des informations sur la couche.

J'espère que cela t'aides!