Hello,
While working on a database test with nose, I dug into sqlalchemy 0.6.6 until I
found these lines:
class DDLElement(expression.Executable, expression.ClauseElement):
"""Base class for DDL expression constructs."""
_execution_options = expression.Executable.\
_execution_options.union({'autocommit':True})
In my nose test against postgresql, I emit a bunch of DDL, perform the test and
then roll back the whole shebang which conveniently makes it look like I didn't
touch the database. Obviously, the emitted commits were getting in my way, so I
wrote this:
class NoCommitDDL(DDL):
def __init__(self,*args,**kw):
super(NoCommitDDL,self).__init__(*args,**kw)
unfrozen = dict(self._execution_options)
del unfrozen['autocommit']
self._execution_options = frozendict(unfrozen)
DDL = NoCommitDDL
I still feel like I am missing something though. I understand that PostgreSQL
is perhaps one of few databases to allow for transaction-aware DDL, but why is
a commit emitted for the DDL for any database, when the database makes it
implied anyway?
Thanks.
Cheers,
M
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.