3 votos

¿Cómo QGIS Python bucle a través de todas las tablas de MS SQL Server?

Tengo código Python en QGIS 3.12 que añade una capa de datos de MS SQL Server al mapa, pero necesito añadirlas todas.

uri = QgsDataSourceUri()

uri.setConnection(r"xx.xxx.xxx.xx\xxx", "xxxx", "xxx", "xxxx", "xxxx")

uri.setDataSource("000001","lcentro", "geom","")

uri.setSrid('31982')

vlayer = QgsVectorLayer(uri.uri(),"Roads","mssql")

QgsProject.instance().addMapLayer(vlayer)

Así que no puedo averiguar cómo hacerlo para todas las tablas de geometría.

The Table

1voto

Sheldon Irving Puntos 16

Para que su código sea generalizable, puede codificar como sigue:

from PyQt4.QtSql import * #for QGIS 3.x use instead PyQt5.QtSql
db = QSqlDatabase.addDatabase("QPSQL");
db.setHostName("localhost");
db.setDatabaseName("postgres");
db.setUserName("postgres");
db.setPassword("postgres");
db.open();
names=db.tables( QSql.Tables)
print names

0voto

Michael Sparks Puntos 411

Después de algunos intentos, lo conseguí así.

#table array
tabelas = (['quadras','lotes','edif','rdatrech','rdaramal'])

#setting conections to DB
dados = QgsDataSourceUri()
dados.setConnection(r"xxxxxx", "1433", "xxx", "user_xxx", "xxxxxx")

#search shapes on tables
for shape in tabelas:
    dados.setDataSource("your_db",shape, "geom","")
    vector_layer = QgsVectorLayer(dados.uri(),"your_db","mssql")
    #add to map
    QgsProject.instance().addMapLayer(vector_layer)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X