使用QGIS for python插件调用QgsDataSourceUri

时间:2018-06-12 08:21:50

标签: python plugins qgis

TLDR:使用QGIS,我试图开发一个python插件来更新数据库。不幸的是我立刻得到了一个错误:Traceback(最近一次调用最后一次):   文件"",第1行,in NameError:name' QgsDataSourceUri'未定义

更详细:

我在QGIS2.18上开发一个插件来更新postgres数据库中的一些数据。 为此,我想使用这种代码:

from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtCore import QSettings
from PyQt4.QtCore import QSettings
from qgis.core import QgsVectorLayer, QgsDataSourceURI

uri = QgsDataSourceUri()

# set host name, port, database name, username and password
uri.setConnection(hote_IP, "5432", base_de_donnee, utilisateur,     mot_de_passe)
# set database schema, table name, geometry column and optionally
# subset (WHERE clause)
#uri.setDataSource("public", "roads", "the_geom", "cityid = 2643")

uri.setDataSource("", sql, "geom", "", "gid")
vlayer = QgsVectorLayer(uri.uri(), zapm, "postgres")
QgsMapLayerRegistry.instance().addMapLayer(vlayer)

(我从网上获得了代码,我稍后会对其进行修改)

我的问题:当我尝试在QGIS的Python控制台上运行此代码时,我立即得到错误

Traceback(最近一次调用最后一次):   文件"",第1行,in NameError:name' QgsDataSourceUri'未定义

即使我只运行导入和行 uri = QgsDataSourceUri(),我也会收到相同的错误消息。

我无法找到解决此问题的方法。

安装QGIS的问题?蟒蛇?糟糕的进口?

配置: qgis 2.18.20 python 3.6.5

如果有人知道如何解决这个问题,我会很高兴。

谢谢, 艾万

1 个答案:

答案 0 :(得分:0)

您只是使用了错误的类名。应该是function glowText(element) { element.className += ' glow'; element.addEventListener('animationend', function() { this.classList.remove('glow'); }); } var myInput = document.getElementById('myInput'); var myOutput = document.getElementById('myOutput') myInput.addEventListener('input', function() { myOutput.textContent = myInput.value*2; glowText(myOutput); }) 而不是uri = QgsDataSourceURI(),因为您已经导入了uri = QgsDataSourceUri()而不是QgsDataSourceURI

QGIS和QT Python类区分大小写。您可以查看QGIS 2.18 related API来确认确切的语法。