[Twisted-Python] adbapi transaction initiation

Timothy Allen screwtape at froup.com
Thu Dec 31 14:13:40 MST 2009


On Thu, 31 Dec 2009 12:35:49 -0500
Landreville <landreville at deadtreepages.com> wrote:

> I've just noticed the transaction_timestamp is actually way (up to
> several minutes) before the database proc gets called. I'm on
> postgresql 8.4 so the transaction_timestamp is when the transaction
> started, and I compared it against the clock_timestamp (absolute
> current time) and it is quite a bit off.
> 
> Does adbapi start transactions before any method (ie runQuery) is
> called?
> 
> Or should I be looking at the underlying database driver to this
> behaviour?

I haven't looked at the code myself, but that seems a reasonable
behaviour to me:

 - adbapi.ConnectionPool, as its name suggests, pre-allocates a bunch
   of database connections.
 - DBAPI2.0 requires that cursors default to doing things in a
   transaction.
 - PostgreSQL natively defaults to doing things immediately, outside a
   transaction, so running "BEGIN" on startup is a sensible thing for a
   PostgreSQL Python module to do.

In fact, now that I think about it, I happen to know that PyPgSQL
cursors (what RedHat packagaes as "postgresql-python") execute "BEGIN"
on creation and immediately after each .rollback() or .commit(), and I
suspect other libraries like psycopg2 would do much the same thing.




More information about the Twisted-Python mailing list