如何使用环境变量建立 psycopg2 连接?
How can I make a psycopg2 connection using environment variables?
我对 psycopg2 documentation 感到困惑,上面写着:
Also note that the same parameters can be passed to the client library using environment variables.
我希望如果我导出了环境变量以便我可以使用 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 连接的惯用和正确方法是什么?
尝试传递一个空的连接字符串:c = p.connect("")
。
我对 psycopg2 documentation 感到困惑,上面写着:
Also note that the same parameters can be passed to the client library using environment variables.
我希望如果我导出了环境变量以便我可以使用 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 连接的惯用和正确方法是什么?
尝试传递一个空的连接字符串:c = p.connect("")
。