回答:
必要な情報を取得するには、QSettings
クラスを使用する必要があります。これは、Windowsレジストリのような階層構造を使用します。QGISの最新バージョンがある場合は、[設定]> [オプション]> [詳細設定]を使用してこの階層を表示できます。
次のコードは、Pythonコンソールから機能します。プラグインやQGISの外部からこれを試したことがないので、これらの場合には追加の作業が必要になる可能性があります。
階層を表示するには、これをQGIS Pythonコンソールで使用します...
from PyQt4.QtCore import QSettings
qs = QSettings()
for k in sorted(qs.allKeys())
print k
出力はいくつかのヒントを与えます...
.. snip ..
Plugins/searchPathsForPlugins
Plugins/valuetool/mouseClick
PostgreSQL/connections/GEODEMO/allowGeometrylessTables
PostgreSQL/connections/GEODEMO/database
PostgreSQL/connections/GEODEMO/dontResolveType
PostgreSQL/connections/GEODEMO/estimatedMetadata
.. snip ...
したがって、プレフィックスPostgreSQL / Connections /でフィルタリングすることにより、データベース接続の詳細を取得できます。
したがって、この場合はGEODEMOという接続があり、次のようにユーザー名を取得できます...
from PyQt4.QtCore import QSettings
qs = QSettings()
print qs.value("PostgreSQL/connections/GEODEMO/username")
>> steven
データベースを念頭に置いたら、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()
ポートは数字ではなく文字列でなければならないことに注意してください。
私の答えは前の答えとほとんど同じですが、すべての設定をループして、PostgreSQLの接続のみを取得することを回避できます
from PyQt4.QtCore import QSettings
s = QSettings()
s.beginGroup("PostgreSQL/connections")
print s.allKeys()
print s.value("GEODEMO/username")
s.endGroup()