2016-05-31 60 views
0

Psycopg2連接類提供str()魔術方法,該方法返回有關連接的一些信息,例如主機,用戶名和數據庫名稱。Psycopg2連接類屬性

如何從連接類第一手獲取該信息?文檔沒有說怎麼了,inspection.getsourcelines(康涅狄格州海峽)錯誤說:

TypeError: "<connection object at 0xb690aecc; dsn: 'user=testuser password=xxxxxxxxx dbname=testdb', closed: 0>" is not a module, class, method, function, traceback, frame, or code object 

我明白Psycopg2是包裹libpq庫模塊,但這是否意味着,一些連接對象屬性不可訪問?

回答

0

dsn實例屬性:

conn = psycopg2.connect(database='cpn') 
print conn.dsn  

輸出:

dbname=cpn 
+0

我希望能像conn.dbname或conn.username那樣獲得更多面向對象的東西。解析conn.dsn的輸出只有幾行,但我正在尋找一些更自然的東西。但謝謝你的答案。 – DevinM

+0

@DevinM我認爲你應該在[Git repo]上提問(https://github.com/psycopg/psycopg2/issues) –

0

通過一些資源挖掘和採摘IRC一些非常好的球員的大腦之後,好像沒有設施在psycopg2中此時以面向對象的方式返回連接信息。必須解析conn.dns的輸出以獲取信息。它可以很容易地完成。

for i in connection.dsn.split(' '): 
     if i.startswith('user'): username = i.split('=')[1] 
     if i.startswith('host'): hostname = i.split('=')[1] 
     if i.startswith('dbname'): dbname = i.split('=')[1] 

for循環使用,由於一個事實,即conn.dsn返回的字符串並不總是相同的。如果使用TCP連接,它有時可以包含主機名,如果使用UNIX套接字,則省略主機,或者具有其他信息,例如SSL或SSH隧道信息。無論哪種情況,這都是解析字符串的簡單而快速的方法。

+0

空格在Postgresql雙引號標識符中是合法的。所以連接參數可以包含'user ='User''中的空格 –