53

我猜这是一个非常基本的问题,但我不知道为什么:

import psycopg2
psycopg2.connect("postgresql://postgres:postgres@localhost/postgres")

给出以下错误:

psycopg2.OperationalError: missing "=" after
"postgresql://postgres:postgres@localhost/postgres" in connection info string

任何想法?根据有关连接字符串的文档,我认为它应该可以工作,但是它只是这样:

psycopg2.connect("host=localhost user=postgres password=postgres dbname=postgres")

我在 Ubuntu12.04 上的 Python2.7.3 上使用最新的 psycopg2 版本

4

3 回答 3

77

我会使用urlparse模块来解析 url,然后在连接方法中使用结果。这样就可以克服 psycop2 问题。

from urlparse import urlparse # for python 3+ use: from urllib.parse import urlparse
result = urlparse("postgresql://postgres:postgres@localhost/postgres")
username = result.username
password = result.password
database = result.path[1:]
hostname = result.hostname
port = result.port
connection = psycopg2.connect(
    database = database,
    user = username,
    password = password,
    host = hostname,
    port = port
)
于 2013-03-26T12:05:05.603 回答
27

传递给的连接字符串psycopg2.connect不被解析psycopg2:它被逐字传递给libpqPostgreSQL 9.2 添加了对连接 URI 的支持

于 2015-09-15T15:06:02.427 回答
1

为了对此进行更新,Psycopg3 实际上包含了一种解析数据库连接 URI 的方法。

例子:

import psycopg # must be psycopg 3

pg_uri = "postgres://jeff:hunter2@example.com/db"
conn_dict =  psycopg.conninfo.conninfo_to_dict(pg_uri)

with psycopg.connect(**conn_dict) as conn:
  ...

于 2022-02-16T09:13:03.023 回答