Как я могу установить соединение с psycopg2, используя переменные окружения? - PullRequest
0 голосов
/ 29 января 2019

Меня смущает документация psycopg2 , в которой говорится:

Также обратите внимание, что те же параметры могут быть переданы в клиентскую библиотеку с помощью переменных среды.

Я ожидал бы, что если у меня будут экспортированы переменные окружения, чтобы я мог подключиться с помощью psql, я смог бы установить такое же соединение с помощью psycopg2.Но, похоже, это не так.

Запуск совершенно нового postgresql в контейнере, например:

$ docker port frosty_lichterman 5432
0.0.0.0:32768
$ export PGHOST=localhost PGUSER=postgres PGPORT=32768

Теперь я могу подключиться с помощью psql без предоставления какой-либо явной строки подключения:

$ psql -c 'select 1;'
 ?column?
----------
        1
(1 row)

Но в Python я не могу:

>>> import psycopg2 as p
>>> c = p.connect()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/michaels/.local/share/virtualenvs/Apps-XhIvHnVr/lib/python2.7/site-packages/psycopg2/__init__.py", line 127, in connect
    raise TypeError('missing dsn and no parameters')
TypeError: missing dsn and no parameters

Даже если я могу подключиться с помощью Python, если я явно предоставлю строку подключения:

>>> c = p.connect('host=localhost user=postgres port=32768')
>>> s = c.cursor()
>>> s.execute('select 1;')
>>> s.fetchall()
[(1,)]

Тактогда что означает документация?Как идиоматично и правильно использовать переменные среды libpq для установления соединения с psycopg2?

1 Ответ

0 голосов
/ 29 января 2019

Попробуйте передать пустую строку подключения: c = p.connect("").

https://github.com/psycopg/psycopg2/issues/767

...