Re: RFC: Extend psycopg2.connect to accept all valid parameters?

From: Fabian Knittel <fabian(dot)knittel(at)avona(dot)com>
To: Daniele Varrazzo <daniele(dot)varrazzo(at)gmail(dot)com>
Cc: psycopg(at)postgresql(dot)org
Subject: Re: RFC: Extend psycopg2.connect to accept all valid parameters?
Date: 2011-11-16 19:39:56
Message-ID: 4EC4118C.2030806@avona.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

Hello Daniele,

Am 16.11.2011 19:56, schrieb Daniele Varrazzo:
> On Wed, Nov 16, 2011 at 5:56 PM, Fabian Knittel
> <fabian(dot)knittel(at)avona(dot)com> wrote:
>> I'm trying to pass the "sslrootcert" connection keyword parameter
>> through sqlalchemy and psycopg2.
[...]
> os.environ['PGSSLROOTCERT'] is (should be) your friend. Also see
> <http://www.postgresql.org/docs/9.1/static/libpq-envars.html>.

True, this is another possible approach. I personally don't see it as
viable solution, because it's not easy to configure via a configuration
file and you can't really configure multiple connections. In my
applications you currently select and configure all DB backends by
setting apropriate connection URIs in the configuration file. Using
environment variables to configure some aspects of a backend would need
explicit code to set and unset the options when using the PostgreSQL
backend (carefully setting it right before a specific connection and
resetting it for the next connection with a different setting). This is
possible, but IMHO falls into the work-around category. I'd probably
use the dsn-work-around mentioned in my initial mail before resorting to
environment variables.

>> Properly fixing it in psycopg2 would probably mean accepting all missing
>> keywords [4] in psycopg2.connect.
>
>> 4: Currently missing keywords: hostaddr, connect_timeout,
>> client_encoding, options, application_name, fallback_application_name,
>> keepalives, keepalives_idle, keepalives_interval, keepalives_count,
>> sslcert, sslkey, sslrootcert, sslcrl, requirepeer, krbsrvname, gsslib,
>> service. (I've omitted requiressl and tty, because they are
>> deprecated/ignored.)
>
> As you see they are a lot, and counting. If I'm not mistaken there is
> a fallback env variable for each of them. [...]

(Sorry, I should have sorted my proposed solutions.)

I agree that option a) is probably the least desirable one. But what do
you think of option b)? Effectively, it would be something along the
lines of

dsn = ' '.join(
['%s=%s' % (key, str(val)) for key, val in kwargs.iteritems()])

translated to C (with a few additional translations, e.g. database to
dbname). All keyword arguments would be translated to a connection
string, without explicit checking. Any unknown keywords would then be
detected by libpq the same way they are detected when the dsn is
explicitly given.

Cheers
Fabian

In response to

Responses

Browse psycopg by date

  From Date Subject
Next Message Daniele Varrazzo 2011-11-16 20:50:25 Re: RFC: Extend psycopg2.connect to accept all valid parameters?
Previous Message Daniele Varrazzo 2011-11-16 18:56:26 Re: RFC: Extend psycopg2.connect to accept all valid parameters?