Answers:
要获取所需的信息,您需要使用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()