[Zope] problem with commits in SQLAlchemyDA
robert rottermann
robert at redcor.ch
Mon Aug 17 10:04:42 EDT 2009
I do not see any reference to mark_changed
you have to call it before any transaction.commit() to tell the zope transaction
machinery that it has to commit you changes also.
robert
Maric Michaud schrieb:
> Hi all,
>
> I wanted to use SQALchemyDA with a standalone Zope 2.11 (we only depends
> on CMFCore).
>
> i tried to get it up using easy_install, which is pretty
> straightforward, once removed the incompatible zope.component package
> needed in the dependencies.
>
> It ends up with the following installed packages (skipping zope 3
> components) :
> zope.sqlalchemy-0.4-py2.4.egg
> z3c.sqlalchemy-1.3.10.1-py2.4.egg
> SQLAlchemy-0.5.5-py2.4.egg
> Products.SQLAlchemyDA-0.4.1-py2.4.egg
>
> At first glance, this works well, but the DA actually can't manage to
> commit any sql requests (I try only for insert in Mysql and postgres but
> I'm sure it's always true).
>
> This is quite an unexpectable behavior for a DA.
>
> I think the problem is related to this thread I found on tg-trunk
> newsgroup :
>
> http://www.mail-archive.com/turbogears-trunk@googlegroups.com/msg07302.html
>
> There is a misleading comment in the docstring of
> zope.sqlalchemy.datamanager.join_transaction speaking of a
> DirtyAfterFlush SessionExtension, which I never seen except in plone code.
>
> In the last I finally manage to make it work by monkey patching
> SQLAlchemyDA itself this way :
>
>
> try :
> from Products.SQLAlchemyDA import da
> from z3c.sqlalchemy import getSAWrapper, createSAWrapper
> if '0.4.1' in da.__file__ and not hasattr(da.SAWrapper,
> '_patched__wrapper_property') :
> da.SAWrapper._patched__wrapper_property = da.SAWrapper._wrapper
>
> def _always_invalidated_wrapper(self):
> """The property '_wrapper' patched by CFENet to correct what
> seems to be a bug in SQLAlchemyDA which prevents any
> commit."""
> from zope.sqlalchemy.datamanager import STATUS_INVALIDATED
> if self.dsn:
> try:
> return getSAWrapper(self.util_id)
> except ValueError:
> return createSAWrapper(
> self.dsn, forZope=True,
> transactional=self.transactional,
> engine_options={'convert_unicode' :
> self.convert_unicode,
> 'encoding' : self.encoding},
> extension_options={'initial_state': # the whole
> # point is here
> STATUS_INVALIDATED},
> name=self.util_id)
> return None
>
> da.SAWrapper._wrapper = property(_always_invalidated_wrapper)
>
> except ImportError :
> pass
>
>
> Anyone has any insights about this problem, any comments on my solution,
> did it have been reported and corrected, or am I simply missing something ?
>
>
More information about the Zope
mailing list