首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQGIS -从PostGis数据库中添加层并在PostGis接口中使用

PyQGIS -从PostGis数据库中添加层并在PostGis接口中使用
EN

Stack Overflow用户
提问于 2020-06-22 08:43:45
回答 1查看 1.4K关注 0票数 0

我尝试从我的db postgis添加一个表到我的QGIS接口中,我使用的是一个具有良好参数的脚本。但我的问题是,当我运行我的函数,我的QGIS错误和关闭。

代码语言:javascript
复制
from qgis.core import *
from qgis.core import QgsProject
from PyQt5.QtCore import QFileInfo
from qgis.core import QgsVectorLayer, QgsDataSourceUri
from qgis.utils import *

def run_script(iface):
   uri = QgsDataSourceUri()
   uri.setConnection("localhost", "5432", "Base_test", "user", "passeword")
   uri.setDataSource("public", "BPE", "geom")

   layer = QgsVectorLayer(uri.uri(), "bpe", "user")
   if not layer.isValide():
       print("Layer %s did not load" %layer.name())  
   QgsProject.instance().addMapLayer(layer)

上面说这层没有装载。在此之后,需要重新启动QGIS。

有人能帮帮我吗。

我正在使用QGIS 3.10

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-03 15:07:33

试试下面的代码:

代码语言:javascript
复制
   from qgis.core import *
   from qgis.core import QgsProject
   from PyQt5.QtCore import QFileInfo
   from qgis.core import QgsVectorLayer, 
   QgsDataSourceUri
   from qgis.utils import *  

   def run_script(iface):
   uri = QgsDataSourceUri()
   uri.setConnection("localhost", "5432", "Base_test", 
   "user", "passeword")
   uri.setDataSource("public", "BPE", "geom")

   layer = QgsVectorLayer(uri.uri(), "bpe", "postgres")
   if not layer.isValid():
       print("Layer %s did not load" %layer.name())  
   QgsProject.instance().addMapLayer(layer)

   run_script()

您所做的拼写mistake:if not layer.isValide()-->if notlayer.isValid()

  • You需要指定提供者(在本例中为postgres) layer = QgsVectorLayer(uri.uri(), "bpe", "user")--> layer=QgsVectorLayer(uri.uri(), "bpe", "postgres")

  • Run/Call函数(您刚刚定义了它):run_script()

查看文档:https://qgis.org/pyqgis/3.0/core/Vector/QgsVectorLayer.html

干杯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62510556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档