Pour obtenir les informations souhaitées, vous devez utiliser la QSettings
classe. Cela utilise une structure hiérarchique, comme le registre Windows. Si vous avez la dernière version de QGIS, vous pouvez voir cette hiérarchie en utilisant Paramètres> Options> Avancé
Le code suivant fonctionne à partir de la console Python. Je n'ai pas essayé cela depuis un plugin ou en dehors de QGIS, donc un travail supplémentaire peut être requis dans ces cas.
Pour voir la hiérarchie, utilisez-la dans la console python QGIS ...
from PyQt4.QtCore import QSettings
qs = QSettings()
for k in sorted(qs.allKeys())
print k
La sortie donne quelques indices ...
.. snip ..
Plugins/searchPathsForPlugins
Plugins/valuetool/mouseClick
PostgreSQL/connections/GEODEMO/allowGeometrylessTables
PostgreSQL/connections/GEODEMO/database
PostgreSQL/connections/GEODEMO/dontResolveType
PostgreSQL/connections/GEODEMO/estimatedMetadata
.. snip ...
Ainsi, vous pouvez obtenir les détails de connexion à la base de données en filtrant le préfixe PostgreSQL / Connections /
Donc dans ce cas, j'ai une connexion appelée GEODEMO, je peux obtenir le nom d'utilisateur comme ça ...
from PyQt4.QtCore import QSettings
qs = QSettings()
print qs.value("PostgreSQL/connections/GEODEMO/username")
>> steven
Une fois que vous avez une base de données en tête, vous pouvez récupérer une liste de tables à l'aide de la classe PostGisDBConnector .
import db_manager.db_plugins.postgis.connector as con
from qgis.core import QgsDataSourceURI
uri = QgsDataSourceURI()
uri.setConnection("127.0.0.1", "5432", "database_name", "username", "password")
c = con.PostGisDBConnector(uri)
print c
print c.getTables()
Notez que le port doit être une chaîne et non un nombre.
Ma réponse sera presque la même que la précédente, mais vous pouvez éviter de boucler tous les paramètres et d'obtenir uniquement des connexions PostgreSQL avec
la source