首页 > 解决方案 > PyQGIS - 从 PostGis 数据库添加图层并在 QGIS 界面中使用它

问题描述

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

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

标签: pythonpostgisqgis

解决方案


试试这个代码:

   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()
  1. 你犯了一个拼写错误:if not layer.isValide()-->if notlayer.isValid()
  2. 您需要指定提供者(在这种情况下为 postgres)layer = QgsVectorLayer(uri.uri(), "bpe", "user")-->layer=QgsVectorLayer(uri.uri(), "bpe", "postgres")
  3. 运行/调用函数(你刚刚定义了它):run_script()

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

干杯


推荐阅读