পাইকিজিআইএস-এ উপলব্ধ পোস্টজিআইএস সংযোগগুলি পুনরুদ্ধার করুন


11

আমি কি পাইকিজিআইএসে পোস্টজিআইএস ডাটাবেসে উপলব্ধ সংযোগগুলি পুনরুদ্ধার করতে পারি? আমি উপলব্ধ ডিবি-সংযোগগুলির একটি তালিকা এবং তারপরে আমার প্লাগইনটির ইউআইয়ের মধ্যে টেবিলের একটি তালিকা সরবরাহ করতে চাই।

আমি কুকবুকটি চেক করেছি তবে এর সাথে আরও কিছু পাওয়ার উপায় খুঁজে পাচ্ছি না।

উত্তর:


12

আপনি যে তথ্য চান তা পেতে আপনার QSettingsক্লাসটি ব্যবহার করা দরকার । এটি উইন্ডোজ রেজিস্ট্রির মতো একটি শ্রেণিবিন্যাসিক কাঠামো ব্যবহার করে। আপনার কাছে কিউজিআইএস এর সর্বশেষতম সংস্করণ থাকলে আপনি সেটিংস> বিকল্পগুলি> উন্নত ব্যবহার করে এই শ্রেণিবিন্যাসটি দেখতে পারেন

নীচের কোডটি পাইথন কনসোল থেকে কাজ করে। আমি এটি কোনও প্লাগইন বা কিউজিআইএস এর বাইরে থেকে চেষ্টা করে দেখিনি, সুতরাং এই ক্ষেত্রে কিছু অতিরিক্ত কাজের প্রয়োজন হতে পারে।

শ্রেণিবিন্যাস দেখতে, কিউজিআইএস পাইথন কনসোলে এটি ব্যবহার করুন ...

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 ...

সুতরাং পোস্টগ্রিএসএসকিউএল / সংযোগগুলি / উপসর্গের জন্য ফিল্টার করে আপনি ডাটাবেস সংযোগের বিশদটি পেতে পারেন

সুতরাং এক্ষেত্রে আমার জিওডেমো নামে একটি সংযোগ রয়েছে, আমি এর মতো ব্যবহারকারীর নামটি পেতে পারি ...

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 ("পোস্টগ্র্রেএসকিউএল / সংযোগগুলি / জিওডেমো / পোর্ট") স্ট্রিংয়ে ফেরতের মান ingালাইয়ের পরে উত্তর ইউরি.সেট সংযোগটি বন্দর সম্পর্কে অভিযোগ করেছে! স্ট্রিংয়ে কাস্ট করার দরকার নেই। সংখ্যা হিসাবে স্বাভাবিক রিটার্ন মান যথেষ্ট ভাল। এছাড়াও, পদ্ধতিটি ধরে নিয়েছে যে ব্যবহারকারীর নাম এবং পাসওয়ার্ড ডেটাবেস সংযোগের সাথে সংরক্ষিত হয়েছে। এখানে রিটার্ন মানগুলির মধ্যে একটি 'মিথ্যা' হলে ব্যবহারকারীর ইনপুটটির সম্ভাবনা তৈরি করতে 'সেভ ইউজারনেম' এবং 'সেভপ্যাসওয়ার্ড' পরীক্ষা করা ভাল।
থমাস বেকার

7

আমার উত্তরটি আগেরটির মতো প্রায় একই হবে তবে আপনি সমস্ত সেটিংস লুপ করতে এড়াতে পারেন এবং কেবল পোস্টগ্রিসএসকিউএল সংযোগগুলি দিয়ে পেতে পারেন

from PyQt4.QtCore import QSettings

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

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

s.endGroup()

হ্যাঁ, এটি কাজ করে এবং প্রশ্নের উত্তর দেয়। আমার কেবল পোস্টগ্রিজ এসকিউএল সংযোগের চেয়ে আরও সাধারণ সমাধান দরকার ছিল, যা প্রাথমিক প্রশ্ন থেকে পুনরুদ্ধারযোগ্য ছিল না। তবে গ্রুপিং সম্পর্কে জেনে রাখা ভাল!
থমাস বেকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.