I wonder if it is possible to get the user and password for a PostGIS database if they are stored in the PostGis connection information.

I get the connection information at the moment from the active layer like this:

connInfo = QgsDataSourceURI(layer.dataProvider().dataSourceUri()).connectionInfo()
print connInfo
dbname='test_geodata_project' host= port=5432 sslmode=disable

userInfo = QgsCredentials.instance().get(connInfo, None, None)
print userInfo
(True, u'testuser', 'test')

But the user has to type in the user/password manually. Is there something like the connectionInfo() but with user/password?

2 Answers 2


Yes, you can do that, but only if you chose to save user and password while establishing the PostGIS connection.

enter image description here

If you did so and your active layer is a PostGIS layer, you can access the connection information this way:

layer = iface.activeLayer()
source = layer.source()
print source

You'll get a key-value string like this:

dbname='mydb' host=localhost port=5432 user='myuser' password='mypassword' sslmode=disable key='gid' srid=4326 type=MULTIPOLYGON table="public"."mytable" (geographicextent) sql=

From which you can obtain the password this way:

kvp = source.split(" ")
for kv in kvp:
    if kv.startswith("password"):
        thePassword = kv.split("=")[1][1:-1]
        print thePassword

Include a similar if for the user into the for loop and you are done.


In QGIS3 you can do the following:

layer = iface.activeLayer()
if layer.providerType() == 'postgres':
    uri = QgsDataSourceUri(layer.dataProvider().dataSourceUri())
    password = uri.password()

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.