[DB-SIG] autocommit support in pep-249

Chris Clark Chris.Clark at ingres.com
Wed Sep 14 19:11:24 CEST 2011


Joshua D. Drake wrote:
>
> On 09/13/2011 09:12 PM, Michael Bayer wrote:
>>
>>
>> On Sep 13, 2011, at 9:15 PM, Joshua D. Drake wrote:
>>
>>>
>>> conn=psycopg2.connect("dbname='foo' user='dbuser', AUTOCOMMIT=TRUE)
>>> cur = conn.cursor()
>>> cur.execute("""INSERT""")
>>> cur.execute("""SELECT * from bar""")
>>> cur.begin()
>>> cur.execute("""INSERT""")
>>> cur.commit()
>>> cur.close()
>>>
>>> Is much better than:
>>>
>>> conn=psycopg2.connect("dbname='foo' user='dbuser', AUTOCOMMIT=TRUE)
>>> cur = conn.cursor()
>>> cur.execute("""INSERT""")
>>> cur.execute("""SELECT * from bar""")
>>> cur.execute("""BEGIN""")
>>> cur.execute("""INSERT""")
>>> cur.commit()
>>> cur.close()
>>>
>>
>> what's wrong with:
>>
>> conn = psycopg2.connect(....)
>> cur = conn.cursor()
>> cur.execute(" ... sql ...")
>> conn.commit()
>
> Nothing, that doesn't actually do anything I didn't suggest above.
>
>>
>> ?   if one wants to work with transactions, DBAPI in it's default 
>> mode provides that.
>
> Correct.
>
>>     If you want all statements to be ad-hoc such that they are 
>> "committed" immediately, whether that means COMMIT after every 
>> statement as it does on Oracle or just no BEGIN emitted as it does on 
>> Postgresql, turn on "autocommit".   "autocommit" is a flag you should 
>> only be able to change when no transactional state has otherwise 
>> accumulated, but otherwise, switch it any time.
>
> Yes.
>
>>
>> Adding explicit begin() means the DBAPI starts to look confused as to 
>> how it should be used - DBAPI authors also have to support two 
>> different transactional styles.
>
> No. What I am saying is, the begin() is optional. If you look at my 
> example, if PostgreSQL is in autocommit mode, the only way to start a 
> transaction is to execute a query to start the transaction (BEGIN or 
> START TRANSACTION). From a, "it would be nice if" perspective, I would 
> like to have the option of using .begin() to start a transaction. That 
> seems to jive better with proper coding.

I think the semantics you are describing are:

   1. auto commit mode is on
   2. whilst in auto commit mode the user wants to start a transaction
      that will not be autocommit

The above is a guess I'm making, ;-) Those semantics are very different 
to other DBMS implementations and maybe why there is some confusion over 
the suggestion.

Chris




More information about the DB-SIG mailing list