[Zope-DB] Dynamically generate sql-query in ZSQL Method
Peter Sabaini
peter at sabaini.at
Wed Apr 7 13:58:02 EDT 2004
Jim Abramson wrote:
> I would recommend that if your ZSQL Method stuff isn't broken, don't fix it.
>
> It is difficult to do complex things with a transactional rdbms in Zope. Along with
> Ian's long list of salient points, I'd add (right up at the top) the complete
> absence of control over transactions - a total nightmare if you have some event
> that you need to trigger a number of write operations that aren't encapsulated in
> a single statement / procedure call.
I've not used this feature much since I try to stay in stored
procedures, but there is the get_transaction().commit() / abort()
functionality. Is this invocation problematic?
> If you need to do this in Zope, the only sane way in my opinion is to externalize -
> write standalone python that takes a reference to your database connection object
> as one of its params, and use it from zope as an external method or product. You can
> run, test, twiddle this all you want from outside zope, and say goodbye to the
> zsql/zmi/dtml hassles (while saying hello to the annoyance of having external, as
> well as internal, assets to manage). You can even pull in database connections from
> some other place than zope, and say goodbye to the nail-biting builtin transaction
> mgmt that zope inflicts. The trade-off is more coding overhead, but you save countless
> hours of hair-pulling trying figure out what zope is doing to your database and
> result data.
I try to do as much as possible in Product code, but use ZSQL Methods
and find that quite usable
Your point about managing internal / external assets is valid of course,
but then its pretty hard to manage code in the ZODB anyway (SCC etc.)
> But of course, you needn't bother with this if zsql methods are doing the trick for
> you! Despite its known flakiness, ZSQL is stable, and certainly known initmately
> by many good folks (on this list for example), and if you've been running an app for
> six months without problems, you probably don't need anything else.
very true
- peter.
> Jim
>
>
>>-----Original Message-----
>>From: garry saddington [mailto:garry at joydiv.fsnet.co.uk]
>>Sent: Wednesday, April 07, 2004 12:00 PM
>>To: zope-db at zope.org
>>Subject: Re: [Zope-DB] Dynamically generate sql-query in ZSQL Method
>>
>>
>>On Wednesday 07 April 2004 12:35 am, Peter Sabaini wrote:
>>
>>>Ian Bicking wrote:
>>>
>>>>On Apr 6, 2004, at 3:23 PM, Jim Penny wrote:
>>>>
>>>>>Ian has told you how to do it. Now, I will tell you,
>>
>>don't do it.
>>
>>>>I would disagree with you -- not for some principled
>>
>>reason, but for a
>>
>>>>very practical reason: Z SQL Methods suck. A lot. A huge, huge
>>>>amount. They are horrible. Generating your own SQL
>>
>>inline sucks. A
>>
>>>>lot. It is horrible. *Sometimes* the inline method is
>>
>>less horrible.
>>
>>>>These are the unfortunate choices foisted upon us by the
>>
>>environment.
>>
>>>>(Actually, it's Z SQL plus the ZMI plus DTML that is the
>>
>>real poison,
>>
>>>>IMHO -- they all work together to make things extra unpleasant)
>>>
>>>Out of curiosity -- what is so horrible about ZSQL Methods?
>>
>>I use them
>>
>>>quite extensively (though mostly to talk to stored
>>
>>procedures) and may
>>
>>>have some nits but dont find them _that_ horrible...
>>>
>>>
>>>>Note also that well designed SQL generation in Python
>>
>>isn't horrible. A
>>
>>>>Python script like:
>>>>
>>>>## select_all
>>>>## parameters: table_name
>>>># re isn't available in the default Zope installation;
>>
>>I'd actually
>>
>>>>usually # do this with an extension method...
>>>>import re
>>>>assert re.search(r'^[a-zA-Z_][a-zA-Z0-9_]*$',
>>
>>table_name), "Invalid
>>
>>>>table name: %s" % table_name
>>>>return container.raw_sql(sql='SELECT * FROM %s' % table_name)
>>>>
>>>>
>>>>That isn't so bad. In fact, I would assert it is much
>>
>>better than the Z
>>
>>>>SQL analog.
>>>
>>>Personally, I'd rather encapsulate this in a stored
>>
>>procedure, or, if
>>
>>>this isn't possible, in a Python class if I really _had_ to
>>
>>dynamically
>>
>>>determine a table name.
>>>
>>> - peter.
>>
>>Now you've got me confused. Being relatively new to Zope this
>>has left me
>>thinking whether I am doing things correctly. i am writing my
>>SQL in a ZSQL
>>method, using DTML for logic and for gathering variables to
>>input to my ZSQL
>>methods.
>>I have a database application running from Zope with
>>Postgresql for the last 6
>>months, programmed as above and have had not one problem with
>>it. Does this
>>discussion mean that I should not do it this way or will
>>things get messy
>>when I add modules to the application, which I plan to.
>>regards
>>garry
>>
>>
>>_______________________________________________
>>Zope-DB mailing list
>>Zope-DB at zope.org
>>http://mail.zope.org/mailman/listinfo/zope-db
>>
>
>
> _______________________________________________
> Zope-DB mailing list
> Zope-DB at zope.org
> http://mail.zope.org/mailman/listinfo/zope-db
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3216 bytes
Desc: S/MIME Cryptographic Signature
Url : http://mail.zope.org/pipermail/zope-db/attachments/20040407/6860d4a2/smime-0001.bin
More information about the Zope-DB
mailing list