[Zope-dev] Passing data to/from Python

Mark Wexler wexler@ccr.jussieu.fr
Mon, 27 Mar 2000 03:41:03 +0200


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.

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".

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?

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?

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)?

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?

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!

Thanks in advance.
Mark Wexler