web-dev-qa-db-ja.com

postgresのURIに接続します

これは非常に基本的な質問だと思いますが、その理由はわかりません。

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バージョンを使用しています

28
Daan Bakker

psycopg2.connectに渡された接続文字列は、psycopg2によって解析されません:libpqにそのまま渡されます。 PostgreSQL 9.2で接続URIのサポートが追加されました

14
kynan

urlparseモジュールを使用してURLを解析し、その結果を接続メソッドで使用します。このようにして、psycop2の問題を克服することができます。

import urlparse # for python 3+ use: from urllib.parse import urlparse
result = urlparse.urlparse("postgresql://postgres:postgres@localhost/postgres")
username = result.username
password = result.password
database = result.path[1:]
hostname = result.hostname
connection = psycopg2.connect(
    database = database,
    user = username,
    password = password,
    Host = hostname
)
40
joamag