This is a very point. I will add it to the manual.

Massimo

On Jan 4, 6:53 pm, Michael Toomim <[email protected]> wrote:
> I just figured out why transactions were confusing me and would like
> to share.
>
> The default for postgresql makes every statement its own transaction
> unless you issue "BEGIN TRANSACTION", in which case nothing commits
> until you issue "COMMIT".  This is called "autocommit" mode in
> postgresql, because each statement is automatically committed unless
> it is in a transaction.  This goes AGAINST the sql92 standard, so you
> can turn it off with "\set autocommit off".
>
> In web2py, "automatic commits" actually means the opposite.  web2py
> follows the SQL standard, where you never need to issue "BEGIN" (it is
> implicit before every query) and nothing commits until you issue
> "COMMIT".  On top of that, web2py automatically issues "COMMIT" for
> you after every controller function exits, unless it throws an error,
> in which case it issues a ROLLBACK.
>
> So the confusing part for me is that postgresql has a completely
> different type of "autocommit" mode, and that transactions work
> opposite of the default in postgres.  It might help future users to
> add a line to the end of the "commit and rollback" section in the
> manual that says something like "Note that web2py has no explicit
> BEGIN TRANSACTION statement which PostgreSQL users may be accustomed
> to. Web2Py uses the equivalent of "\set AUTOCOMMIT OFF" as described
> athttp://www.postgresql.org/docs/8.4/interactive/app-psql.html.";
>
> Massimo, what would you think of adding this to the manual?
>
> On Jan 4, 12:56 pm, mdipierro <[email protected]> wrote:
>
> > On Jan 4, 1:54 pm, Thadeus Burgess <[email protected]> wrote:
>
> > > Can you disable auto_commit so that you have to explicitly declare 
> > > db.commit() ?
>
> > You can already expliticely db.commit()
>
> > > Also, say I have the following
>
> > > db.table.insert(myfields=...)
>
> > > and then later in the same request, would a
>
> > > db.table.select() pull in the newly inserted record, or does the
> > > record need to be committed first?
>
> > It will show even if you do not commit
>
> > > If I insert data in a long running request, and then another request
> > > comes in that is opened in another thread, does it have access to any
> > > uncommitted data from the other running threads?
>
> > No unless you db.commit() after each insert (and you should if the
> > process is long running or it may lock the database).
>
> > > -Thadeus
>
> > > On Sun, Dec 27, 2009 at 3:51 PM, mdipierro <[email protected]> 
> > > wrote:
> > > > a request arrives web2py creates a new database connection object
> > > > or pools an existing connection from a connection pool, then it
> > > > creates a cursor object. All db IO in the request is done via the
> > > > cursor object. This is thread-safe in the sense that the cursor is
> > > > only used in one thread. As soon as the request completes, the
> > > > transaction is committed or rolled back and the connection is closed
> > > > or recycled.
>
> > > > You can pass the db object to a thread and use it in another thread
> > > > BUT you must make sure that t
>
>

--

You received this message because you are subscribed to the Google Groups 
"web2py-users" 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/web2py?hl=en.


Reply via email to