2016-05-31 59 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''中的空格 –