[Zope-DB] Using psycopg directly in Zope Python script

Dieter Maurer dieter at handshake.de
Sun Jul 3 17:55:16 EDT 2005

Jørgen Frøjk Kjærsgaard wrote at 2005-7-1 23:28 +0200:
>I need to be able to access a Postgresql database directly from Zope 
>Python scripts (Z SQL Methods is not an option as the SQL code occurs in 
>modules that must be re-usable in a non-Zope context).
> ...
>import psycopg
>dbcon = psycopg.connect('host=%s dbname=%s user=%s' % ('dbhost', 
>'dbname', 'username'))

You should *NOT* do this because you move outside of Zope's
transaction handling.

Fetch the connection from the DA. It looks somehow like:

      db = DA()	# low level connection object
      db._register() # register with Zope's transaction system
      conn = db.db # this is the "psycopg" connection

Pass the "conn" into your code.
> ...
>When run outside Zope, it opens a connection as expected. When run in 
>Zope, however, I get "thrown out" - the browser asks me to enter my user 
>name and password again. I get no error message!

Cancel the login dialog and you will get the error message :-)

>Does Zope somehow create a restricted environment

PythonScripts are a restricted environment where "import" is
restricted as well as access to attributes.


More information about the Zope-DB mailing list