[Zope] Passing data to/from Python

Curtis Maloney curtis@umd.com.au
Mon, 27 Mar 2000 12:17:00 +1000


On Mon, 27 Mar 2000, Mark Wexler wrote:
> Dear Zopistas,
> 
> I am in the process of learning about Zope, and trying to
> determine whether to make the switch from pure Python CGI
> scripts. If someone could answer the following questions (and I
> apologize, as it will probably seem naive), it would really help.
> 
We all had to start somewhere.. (o8

> Let's suppose I have a page where the user queries a data base,
> for instance a telephone directory. The telephone directory is in
> an Excel file. At present, I have a CGI script that opens an
> ODBC.Windows connection, executes an SQL query, and outputs the
> results (names, phone numbers) as an HTML table using "print".
> 
Sounds simple enough...

> What is the best way to do this in Zope? Here are the points that
> I don't get:
> 
> 1. It seems that the only way to establish a DB connection is
> through Gadfly. There are warnings everywhere that Gadfly is
> inefficient. Therefore, I want to use ODBC (ODBC.Windows), like I
> did before. How?
> 
Nonono.... ZOPE uses the Gadfly db to store "zope objects".  It can also
connect to other DBs, and access them via SQL methods.  There are a number of
DB interfaces, including an ODBC interface.

> 2. I might eventually need to do complex calculations on the
> retrieved data, so I would prefer using Python code in an
> external method, rather than a DTML method. In order to get Zope
> to accept the line "import ODBC.Windows", I had to copy the ODBC
> and DateTime directories from my regular Python installation
> (PYTHON/lib) to ZOPE/bin/lib. But then, when I try running the
> script, I get one of the following problems:
> 
>    a. If I go through authentification, the script runs, but I
>    cannot establish the connection to the database.
> 
>    b. If I type in the URL of my search page directly, without
>    authentification, I get a Zope error: "initialization of
>    module mxODBC failed
>    (exceptions.AttributeError:mxDateTimeAPI)".
> 
> Is my ODBC.Windows installation wrong, or do I have a more
> fundamental problem?
> 
Erm.. i'm out of my depth on this one.... i'll leave that to someone else. (o8

> 3. What if my Python function in my external method wants to
> return information to my DTML method? For instance, how do I
> return a Python list, and what do I do in my DTML method to
> process it (e.g., output a line for every member of the list)?
> 
afaik, you can simply return a list.  As for iterating through the list, you
would use <dtml-in myMethod> stuff goes here </dtml-in>

> 4. The way I call my Python function now is through the <form
> method="POST" action="search"> tag, where "search" is the
> external method ID. The form has a field called "name", and my
> Python function has an argument also called "name", and so it
> recuperates the string that was entered in the "name" field. Can
> I pass the "name" as an argument to a DTML method?
> 
All fields passed in a POST are available via the REQUEST.form map.  Also, so
long as they don't match the name of other objects in the namespace, you can
access then directly.  So, your 'name' field will be accessible:

<dtml-var name>  <-- assuming you don't have any other objects called "name"
<dtml-var "REQUEST['name']">    or
<dtml-var "REQUEST.form['name']">

> If these questions have answers, I would really appreciate them.
> Otherwise, if I'm completely off-base (for instance, if I'm
> thinking in Python terms and not in Zope terms), please point me
> in the right direction!
> 
Here are my answers, I hope they help.  I'm sure others will contribute
comments, but feel free to grill me for further details.

> Thanks in advance.
> Mark Wexler
> 
-- 
Have a better one,
	Curtis.

<dtml-var standard_work_disclaimer>