2013-03-26 7 views
19

Zgaduję, że jest to dość proste pytanie, ale nie mogę zrozumieć, dlaczego:Połącz się z URI w PostgreSQL

import psycopg2 
psycopg2.connect("postgresql://postgres:[email protected]/postgres") 

daje następujący błąd:

psycopg2.OperationalError: missing "=" after 
"postgresql://postgres:[email protected]/postgres" in connection info string 

Any pomysł? Według the docs about connection strings wierzę, to powinno działać, jednak to nie tylko tak:

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

Używam najnowszej wersji psycopg2 na Python2.7.3 na Ubuntu12.04

Odpowiedz

29

chciałbym użyć modułu urlparse do przeanalizuj adres URL, a następnie użyj wyniku w metodzie połączenia. W ten sposób można pokonać problem psycop2.

import urlparse # import urllib.parse for python 3+ 
result = urlparse.urlparse("postgresql://postgres:[email protected]/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 
) 
+2

Doceniam ten pomysł, ale miałem nadzieję, że znajdę coś bardziej ogólnego, co pozwoli zaakceptować dowolny postgres URI "RFC 3986". –

+1

Domyślam się, że jest to jakieś ograniczenie psycop2, z którym będziesz musiał mieszkać. – joamag

+12

W końcu dowiedziałem się, na czym polega problem. To, czy łańcuchy URI są obsługiwane, nie zależy od twojej wersji 'PostgresQL' (a NIE od twojej wersji' psycopg2'). Używam wersji 9.1 PostgresQL, która ich nie obsługuje. –