web-dev-qa-db-fra.com

Se connecter à un URI en postgres

Je suppose que c'est une question assez basique, mais je ne peux pas comprendre pourquoi:

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

Donne l'erreur suivante:

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

Une idée? Selon la documentation sur les chaînes de connexion je pense que cela devrait fonctionner, mais il n'aime que ceci:

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

J'utilise la dernière version de psycopg2 sur Python2.7.3 sur Ubuntu12.04

28
Daan Bakker

La chaîne de connexion passée à psycopg2.connect n'est pas analysé par psycopg2: il est transmis textuellement à libpq. La prise en charge des URI de connexion a été ajoutée dans PostgreSQL 9.2 .

14
kynan

J'utiliserais le module urlparse pour analyser l'url et ensuite utiliser le résultat dans la méthode de connexion. De cette façon, il est possible de surmonter le problème 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