如何使用环境变量建立psycopg2连接?

时间:2019-01-29 14:29:05

标签: python postgresql psycopg2 libpq

我对psycopg2 documentation感到困惑,它说:

  

还请注意,可以使用环境变量将相同的参数传递到客户端库。

我希望,如果我导出了环境变量,以便可以使用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 :(得分:3)

尝试传递一个空的连接字符串:c = p.connect("")

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