2016-05-31 2 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 = 'Пользователь' –

Смежные вопросы