[Zope-dev] complex zope applications
Jordan B. Baker
jbb@spyderlab.com
Wed, 26 May 1999 13:20:29 -0400 (EDT)
Hi:
I'm jumping into this discussion cause I'm also doing something similar..
On Wed, 26 May 1999, Martijn Faassen wrote:
> How do you plan to use Python to talk to databases? Are you going to use
> Zope or use the Python db-api? If you use Zope SQL methods you need to
> talk through these methods from your Python. I don't have experience
> with it but this is possible; the Z SQL methods can be treated as Python
> methods from Python, basically.
Using Zope's SQL methods work pretty well. When you call the SQL
method from Python it returns an instance of the Results class (see
Shared/DC/ZRDB in the lib dir). Its actually really easy to use this
class because it has overridden indexing methods, etc, so you can do
something like:
rs = sql_method()
rcpts = map(lambda x: x['email'], rs)
(note there is a bit of trickiness involved getting the method.
Sometimes I pass it as a parameter from a DTML #call tag)
So this extracts the email column from each row and puts it into a list.
Obviously the main advantage here is that you can abstract the
database layer. I suppose this means you don't even need to access
SQL databases, since other things could return Results objects.
Fun stuff. :)
> Another tricky part would be 'business objects'. The simple way to
> interface Zope with Python are external methods (written in Python). If
> you get your business objects done with external methods, I'd recommend
> this route. External methods are not 'business objects', however
> ('business methods', I suppose?), though of course you can package a
> number of them together inside a Zope folder. (you can bundle them in a
> subfolder which will be automatically acquired by other subfolders..this
> way they remain manageable and don't pollute your root folder).
One idea I was playing around was using the pluggable brains support
with SQL methods to wrap all results into business objects.
I haven't really found much documentation on this, but I will be
investigating this very soon as I prototype some stuff to explore
various implementation methods.
What do you think about this instead of external methods? Managing a
class is sometimes easier than managing a bunch of seperate methods.
> Another way in the future would be to use ZClasses. ZClasses are part of
> the Zope 2.0 Alpha, but it'll take some time before there'll be a
> production version of Zope featuring them. From what I understand of
> ZClasses you can create a new Zope product from inside Zope with them
> (basically by packaging DTML and external methods together).
Hmm, I am wondering about using ZClasses because I'd like to further
abstract data storage by saying that I could either store objects in
the ZODB or in a SQL database. One thing missing to fully enable this
are ZODB Query Methods which would allow you to return Results objects
from a ZODB-based query.
Maybe this already exists for ZTables? If so I'd like to know.
Does this mean a ZClass could potentially be used as a pluggable brain
for SQL Method or are we talking different things here.
Anyway, that's enough for me. my brain hurts. :)
-------
Jordan B. Baker -- jbb@spyderlab.com
weaving the web @ http://www.spyderlab.com