Connectez - vous à une URI à 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 les docs sur les chaînes de connexion je crois qu'il devrait fonctionner, cependant il ne fait comme 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

24
demandé sur Darek 2013-03-26 13:58:20

3 réponses

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

9
répondu kynan 2015-09-15 15:06:02

j'utiliserais le urlparse module pour analyser l'url, puis utiliser le résultat dans la méthode de connexion. De cette façon, il est possible de surmonter le problème de 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
)
35
répondu joamag 2018-05-31 22:32:10

Essayez postgres comme le système plutôt que postgresql

0
répondu A. Beeson 2018-03-28 16:16:16