Чи можу я отримати доступні підключення до баз даних PostGIS в PyQGIS? Я хотів би надати список доступних db-з'єднань, а згодом і список таблиць в інтерфейсі мого плагіна.
Я перевірив кулінарну книгу, але не можу знайти шлях із цим.
Чи можу я отримати доступні підключення до баз даних PostGIS в PyQGIS? Я хотів би надати список доступних db-з'єднань, а згодом і список таблиць в інтерфейсі мого плагіна.
Я перевірив кулінарну книгу, але не можу знайти шлях із цим.
Відповіді:
Для отримання потрібної інформації вам потрібно скористатися QSettings
класом. Для цього використовується ієрархічна структура, як-от реєстр Windows. Якщо у вас є остання версія QGIS, ви можете побачити цю ієрархію, скориставшись Налаштуваннями> Параметри> Додатково
Наступний код працює з консолі Python. Я не пробував цього з плагіна або поза 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()