Để có được thông tin bạn muốn, bạn cần sử dụng QSettings
lớp. Điều này sử dụng một cấu trúc phân cấp, như Windows registry. Nếu bạn có phiên bản mới nhất của QGIS, bạn có thể xem cấu trúc phân cấp này bằng Cài đặt> Tùy chọn> Nâng cao
Đoạn mã sau hoạt động từ Bảng điều khiển Python. Tôi đã không thử điều này từ một plugin hoặc bên ngoài QGIS, vì vậy một số công việc bổ sung có thể được yêu cầu trong những trường hợp này.
Để xem cấu trúc phân cấp, hãy sử dụng tính năng này trong bảng điều khiển python của QGIS ...
from PyQt4.QtCore import QSettings
qs = QSettings()
for k in sorted(qs.allKeys())
print k
Đầu ra cho một số gợi ý ...
.. snip ..
Plugins/searchPathsForPlugins
Plugins/valuetool/mouseClick
PostgreSQL/connections/GEODEMO/allowGeometrylessTables
PostgreSQL/connections/GEODEMO/database
PostgreSQL/connections/GEODEMO/dontResolveType
PostgreSQL/connections/GEODEMO/estimatedMetadata
.. snip ...
Vì vậy, bạn có thể nhận chi tiết kết nối cơ sở dữ liệu bằng cách lọc tiền tố PostgreSQL / Connections /
Vì vậy, trong trường hợp này tôi có một kết nối được gọi là GEODEMO, tôi có thể có được tên người dùng như vậy ...
from PyQt4.QtCore import QSettings
qs = QSettings()
print qs.value("PostgreSQL/connections/GEODEMO/username")
>> steven
Khi bạn đã có cơ sở dữ liệu, bạn có thể truy xuất danh sách các bảng bằng lớp 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()
Lưu ý rằng cổng phải là một chuỗi, không phải là một số.