Меня смущает документация 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?