What do you mean by "Auto Commit" ?

1) SqlAlchemy has an auto-commit mode.  That means you do not wrap 
statements in transactions, and data is directly written to the tables. 
 You would still need to call a "flush()" for SqlAlchemy to talk to the 
database though.  SqlAlchemy will not talk to the database until you tell 
it to.

2) Pyramid has the pyramid_tm transaction manager, which will automatically 
wrap every view in a transaction; starting a request off with a BEGIN and 
ending with a commit (if you do not raise any errors) or rollback if you do 
raise errors.  

the execution flow under pyramid tm is roughly like this:

* pyramid - new request
* pyramid_tm - transaction begin
* your code - some_view()
* pyramid_tm - if an exception was raised, "rollback" ; else "commit"

under pyramid_tm, the view can not wait for the transaction to 
commit/rollback.  the view must finish and return a value before pyramid_tm 
will try to finish the transaction.  

if you need to use the results of any database activity in your response, 
you should call flush() -- which will make the data available to the view.  

here's a quick example:

    @viewconfig( renderer='json' )
    def new_user(request):
           user = model.User( name="jonathan" )
           dbSession.add(user)
           dbSession.flush()
           return { 'user_id': user.id }

if I hit this view the first time:

    * in the database i create a new user, i flush() the connection to 
write to the database and my 'user.id' is now available.  i return the 
user.id.  no exceptions were raised, so pyramid_tm commits the transaction.

if i run this another time -- and everything works fine, but there was an 
unknown database error
   * everything is fine, so pyramid_tm tries to commit.  something on the 
database won't allow it, so it catches the error and issues a rollback.  an 
error is raised.

if i run this a third time -- but now there is a unique constraint on the 
user name --
   * when I flush() the transaction, sqlalchemy raises an error.  i didn't 
catch it, so it bubbles up.  eventually pyramid_tm catches it, and issues a 
rollback.

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to pylons-discuss+unsubscr...@googlegroups.com.
To post to this group, send email to pylons-discuss@googlegroups.com.
Visit this group at http://groups.google.com/group/pylons-discuss.
For more options, visit https://groups.google.com/d/optout.

Reply via email to