I want to load a PostGIS layer to QGIS canvas. I am using the following code but it is not loading the layer in canvas.

sql = "(SELECT * FROM table WHERE id = 20)"
uri = QgsDataSourceURI()
uri.setConnection("host", "5432", "databasename", "user", "password")
uri.setDataSource("public","table", "the_geom", sql,"gid")
print uri.uri()
vlayer = QgsVectorLayer(uri.uri(), "test", "postgres")

But the layer is not loaded. I don't know what I am doing wrong here.

  • what does vlayer.isValid() outputing ?
    – SIGIS
    Aug 22 '16 at 6:35

The sql-parameter is not what it sounds like. It only takes a where-clause, like 'id = 20' in your case. So try:

uri.setDataSource("public","table", "the_geom", 'id = 20',"gid")

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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