代码之家  ›  专栏  ›  技术社区  ›  kojiro

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

  •  1
  • kojiro  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  8
  •   Chris    7 年前

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

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