On May 27, 2010, at 5:12 PM, Kent wrote:
> The docs state "For each begin_nested() call, a corresponding
> rollback() or commit() must be issued."
>
> In PostgreSql, according to my understanding, if there is ever a
> database exception, a rollback must be issued.
> This means a main reason to issue a SAVEPOINT is as a hedge against an
> error.
>
> As database transactions go, I want this entire thing to be a single
> transaction, so now I don't know how to continue...
>
> For example,
>
> DBSession.begin_nested() #savepoint
> DBSession.add(obj)
> try:
> DBSession.flush()
> except IntegrityError:
> DBSession.rollback()
> else:
> # now what? I do not want to commit, i have much
> # more work to do than this which should be part of
> # this transaction, but if I don't commit now,
> # i need to issue 2 commits later()??
>
> Is releasing the savepoint a choice instead of rolling() or commit()?
commit() releases the savepoint, if thats whats going on contextually. It
doesnt actually commit the outer transaction if you've last called
begin_nested().
your block should be like:
session.begin_nested()
try:
...
session.flush()
session.commit()
except:
session.rollback()
--
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.