使用 QGIS 为 python 插件调用 QgsDataSourceUri

calling QgsDataSourceUri with QGIS for python plugin

TLDR:使用 QGIS,我正在尝试开发一个 python 插件来更新数据库。不幸的是,我立即收到一个错误:Traceback(最后一次通话): 文件“”,第 1 行,位于 NameError:名称 '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 控制台上 运行 这段代码时,我立即收到错误消息

回溯(最近调用最后): 文件“”,第 1 行,位于 NameError: 名称 'QgsDataSourceUri' 未定义

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

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

QGIS 安装有问题? python?错误的导入?

配置: qgis 2.18.20 python3.6.5

如果有人知道如何解决这个问题,我将非常高兴。

谢谢, 埃尔万

您只是使用了错误的 class 名称。它应该是 uri = QgsDataSourceURI() 而不是 uri = QgsDataSourceUri() 因为你导入的是 QgsDataSourceURI 而不是 QgsDataSourceUri

QGIS 和 QT Python class 区分大小写。您可以查看 QGIS 2.18 related API.

确认确切的语法