[Zope-DB] transactions

Martin Gebert Murphy@members.netsolution-net.de
Wed, 15 Jan 2003 00:16:06 +0100


Arenz, Ralph schrieb:

>Hello,
>
>i have a problem with mysql-transaction out of zope.
>
>I tried the transaction-mechanism in a external python 
>program via the python DB-API , that work's fine.
>==> I used "commit" , "rollback" on the connection-object
>
>
>If i try to reproduce a transaction-handling in Zope, it fails.
>==>I tried the following in a external method and in a dtml-method:
>            get_transaction().begin()
>            -> call a ZSQL-Method
>            get_transaction().abort()
>
>Can anyone enhance my horizon ?            
>
First, in Zope the Z SQL Method and the DA shield you from calling 
DB-API methods directly. The above won't work, 'cause you can't 
(shouldn't!) access the DA/DB-API methods. (Sure, you could import and 
use the DB-API, but don't do that except you're a Zope hacker and you 
know *exactly* what you're doing; it will surely make your zopeing more 
"interesting", read complicated).
Second, if you enable transaction support in your ZMySQLDA, Zope 
includes the DBMS transactions into it's own TA handling where every TA 
starts with a REQUEST (calling an object and interpreting it and the 
invoked scripts/methods/etc.) and ends with the successful RESPONSE, 
giving back the rendered output. If there's an exception somewhere 
between (something that would usually result in a 
standard_error_message) Zope rolls it's own *and* the DBMS transactions 
back.
Ergo, you usually don't need to mess with TAs, Zope does it for you. Let 
it, and you'll be happy (except for some quite weird kinds of 
application...). I've made good experiences myself with this mechanism :-)

For more knowledge about using Z SQL, please read the appropriate 
chapter in the ZopeBook...

Martin