ZAPYTANIA SQL Z POZIOMU KONSOLI W QGIS

Koleżanka zadzwoniła z pytaniem, jak wykonać kilkanaście zapytań SQL w QGISie. Najlepiej żeby się robiły automagicznie. Dane miała zaimportowane z shp do Spatialite.

Generalnie dałoby się to (chyba?) zrobić z poziomu wtyczki QSpatiaLite, służącej do obsługi baz Spatialite’owych, ale jakoś całe zagadnienie poszło w stronę skryptu pythona. Pythonowy skrypt nie jest o wiele trudniejszy do napisania niż te kilkanaście SQL, a oferuje wiele więcej możliwości. Poniżej przykład, jak mógłby taki skrypt wyglądać. Komentarze są już w samym skrypcie, więc nie będę się powtarzał i opisywał, co się dzieje w danym momencie.

 

# -*- coding: utf-8 -*-
#importujemy potrzebne moduly
from PyQt4 import QtSql
#polaczenie do spatialite
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
#podajemy plik z baza
db.setDatabaseName('D:\\Praca\\Projekty\\myDB.sqlite')
#jesli polaczenie będzie poprawne dostaniemy komunikat 
#i wykonaja sie zapytania SQL
if db.open():
    print 'baza otwarta'
    query = QtSql.QSqlQuery(db)
    #tu podstawiamy do zmiennej zapytanie sql
    zap_del = "drop table 'tabela_test'"
    zap = "create table 'tabela_test' as select * from 'centroidy_gm_'"
#tak wykonujemy zapytanie
    query.exec_(zap_del)
    query.exec_(zap)
    print 'wykonano'
else:
    #jesli nie uda sie polaczyc z baza - dostaniemy komunikat
    print 'nie bangla'

W przykładzie są dwa proste SQLowe zapytania, ale nie ma oczywiście przeciwwskazań, żeby zaszyć ich tu więcej. Byle były obsługiwane przez SpatiaLite.

Taki skrypt wystarczy zapisać do pliku, a później w konsoli QGISa, w edytorze skryptów,  otworzyć go i wykonać. Prawda,  że proste?

Related Posts