En QGIS tengo una base de datos Spatialite que contiene tablas sin columna de geometría. Con la interfaz gráfica de QGIS es perfectamente posible añadir dicha tabla como una "capa vectorial de Spatialite". Pero, ¿cómo hacer esto en Python?
En la consola he probado:
>>> uri = QgsDataSourceURI()
>>> uri.setDatabase('/<path>/test.sqlite')
>>> uri.setDataSource('', 'TestTableName','','','id')
>>> vlayer = QgsVectorLayer(uri.uri(), 'TestLayer', 'spatialite')
>>> QgsMapLayerRegistry.instance().addMapLayer(vlayer)
Sin resultado
>>> vlayer.isValid()
False
¿Qué está fallando?
Algunos análisis adicionales: Cuando añado esta capa por la GUI la descripción uri es la siguiente:
>>> qgis.utils.iface.activeLayer().dataProvider().dataSourceUri()
PyQt4.QtCore.QString(u'dbname=\'/<path>/test.sqlite\' table="TestTableName" sql=')
Cuando añado esta capa por la consola de Python como se ha descrito anteriormente, la descripción uri es algo diferente:
>>> uri.uri()
PyQt4.QtCore.QString(u'dbname=\'/<path>/test.sqlite\' table="TestTableName" () sql=')
¿Podrían los paréntesis vacíos causar un comportamiento diferente? ¿Así que tal vez QGIS 1.8.0 maneja los paréntesis vacíos de forma diferente a como lo hace sin paréntesis?