PyQGIS에서 사용 가능한 PostGIS 연결 검색


11

PyQGIS에서 PostGIS 데이터베이스에 사용 가능한 연결을 검색 할 수 있습니까? 사용 가능한 db-connections 목록과 플러그인의 UI 내에 테이블 목록을 제공하고 싶습니다.

요리 책을 확인했지만 이것으로 더 나아갈 방법을 찾을 수 없습니다.

답변:


12

원하는 정보를 얻으려면 QSettings수업 을 사용해야합니다 . 이것은 Windows 레지스트리와 같은 계층 구조를 사용합니다. 최신 버전의 QGIS가있는 경우 설정> 옵션> 고급을 사용하여이 계층 구조를 볼 수 있습니다

다음 코드는 Python 콘솔에서 작동합니다. 플러그인이나 QGIS 외부에서 시도하지 않았으므로 이러한 경우 추가 작업이 필요할 수 있습니다.

계층 구조를 보려면 QGIS python 콘솔에서 이것을 사용하십시오.

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()

포트는 숫자가 아닌 문자열이어야합니다.


1
감사합니다. 플러그인에서 제대로 작동하며 기본적으로 조정할 필요가 없습니다. 한가지 ... qs.value ( "PostgreSQL / connections / GEODEMO / port")의 반환 값을 문자열로 캐스팅 할 때 후자의 uri.setConnection이 포트에 대해 불평했습니다! 문자열로 캐스트 할 필요는 없습니다. 숫자로 정상 반환 값이 충분합니다. 또한이 절차에서는 사용자 이름과 비밀번호가 데이터베이스 연결과 함께 저장되어 있다고 가정합니다. 리턴 값 중 하나가 'false'인 경우 사용자 입력 가능성을 작성하기 위해 'saveUsername'및 'savePassword'를 확인하는 것이 좋습니다.
토마스 베커

7

내 답변은 이전 답변과 거의 동일하지만 모든 설정을 반복하지 않고 PostgreSQL 연결 만 얻을 수 있습니다

from PyQt4.QtCore import QSettings

s = QSettings()
s.beginGroup("PostgreSQL/connections")

print s.allKeys()
print s.value("GEODEMO/username") 

s.endGroup()

그렇습니다. 작동하고 질문에 대답합니다. 초기 질문에서 검색 할 수없는 PostgreSQL 연결보다 더 일반적인 솔루션이 필요했습니다. 그러나 그룹화에 대해 알아야합니다!
토마스 베커
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.