ฉันสามารถดึงการเชื่อมต่อที่มีอยู่ไปยังฐานข้อมูล PostGIS ใน PyQGIS ได้หรือไม่ ฉันต้องการให้รายการของการเชื่อมต่อฐานข้อมูลที่มีอยู่และต่อมาก็คือรายการตารางภายใน UI ของปลั๊กอินของฉัน
ฉันตรวจสอบตำราอาหาร แต่ไม่สามารถหาทางที่จะไปให้ไกลกว่านี้ได้
ฉันสามารถดึงการเชื่อมต่อที่มีอยู่ไปยังฐานข้อมูล PostGIS ใน PyQGIS ได้หรือไม่ ฉันต้องการให้รายการของการเชื่อมต่อฐานข้อมูลที่มีอยู่และต่อมาก็คือรายการตารางภายใน UI ของปลั๊กอินของฉัน
ฉันตรวจสอบตำราอาหาร แต่ไม่สามารถหาทางที่จะไปให้ไกลกว่านี้ได้
คำตอบ:
ในการรับข้อมูลที่คุณต้องการคุณต้องใช้QSettings
คลาส สิ่งนี้ใช้โครงสร้างแบบลำดับชั้นเช่นรีจิสทรีของ Windows หากคุณมี QGIS เวอร์ชันล่าสุดคุณสามารถดูลำดับชั้นได้โดยใช้การตั้งค่า> ตัวเลือก> ขั้นสูง
รหัสต่อไปนี้ใช้งานได้จาก Python Console ฉันไม่ได้ลองจากปลั๊กอินหรือนอก QGIS ดังนั้นอาจต้องมีการทำงานเพิ่มเติมในกรณีเหล่านี้
เพื่อดูลำดับชั้นให้ใช้สิ่งนี้ในคอนโซล Python ของ QGIS ...
from PyQt4.QtCore import QSettings
qs = QSettings()
for k in sorted(qs.allKeys())
print k
ผลลัพธ์ให้คำแนะนำ ...
.. snip ..
Plugins/searchPathsForPlugins
Plugins/valuetool/mouseClick
PostgreSQL/connections/GEODEMO/allowGeometrylessTables
PostgreSQL/connections/GEODEMO/database
PostgreSQL/connections/GEODEMO/dontResolveType
PostgreSQL/connections/GEODEMO/estimatedMetadata
.. snip ...
ดังนั้นคุณสามารถรับรายละเอียดการเชื่อมต่อฐานข้อมูลโดยการกรองคำนำหน้าPostgreSQL / Connections /
ดังนั้นในกรณีนี้ฉันมีการเชื่อมต่อที่เรียกว่า GEODEMO ฉันจะได้รับชื่อผู้ใช้เช่นนั้น ...
from PyQt4.QtCore import QSettings
qs = QSettings()
print qs.value("PostgreSQL/connections/GEODEMO/username")
>> steven
เมื่อคุณมีฐานข้อมูลในใจคุณสามารถเรียกดูรายการของตารางโดยใช้ระดับ PostGisDBConnector
import db_manager.db_plugins.postgis.connector as con
from qgis.core import QgsDataSourceURI
uri = QgsDataSourceURI()
uri.setConnection("127.0.0.1", "5432", "database_name", "username", "password")
c = con.PostGisDBConnector(uri)
print c
print c.getTables()
โปรดทราบว่าพอร์ตควรเป็นสตริงไม่ใช่ตัวเลข
คำตอบของฉันจะใกล้เคียงกับคำตอบก่อนหน้านี้ แต่คุณสามารถหลีกเลี่ยงการวนซ้ำการตั้งค่าทั้งหมดและรับเฉพาะการเชื่อมโยง PostgreSQL ด้วย
from PyQt4.QtCore import QSettings
s = QSettings()
s.beginGroup("PostgreSQL/connections")
print s.allKeys()
print s.value("GEODEMO/username")
s.endGroup()