[python-win32] python-win32 Digest, Vol 163, Issue 6

Max Slimmer maxslimmer at gmail.com
Mon Oct 24 12:16:35 EDT 2016


The adodbapi documentation and code implies that with autocommit = False I
should only have to call commit (and possibly rollback) and if using the
connection as a context manager not even those are required.
If autocommit = False is passed on the initial connect the __init__ of the
connector handles BeginTrans and subsequent commit and rollbacks also leave
me with an open trans.
But if I do this:

    conn = adodbapi.connect(conn_args, autocommit=True)

    conn.autocommit = False

    with conn:

        cur = conn.cursor()
        cur.execute("insert into table1 (col1) values (?)", ('row5', ))
        print 'inserted a row'


I get  an exception that there is not an existing transaction to commit.
I created a quick subclass of the Connect class that handles the
__setattr__ for 'autocommit' by calling self.BeginTrans() if autocommit =
False

class MyConnection(adodbapi.Connection):
    """"""
    def __setattr__(self, name, value):
        super(self.__class__, self).__setattr__(name, value)
        if name == 'autocommit':
            if (not self._autocommit
                and self.supportsTransactions
                and self.transaction_level == 0):
                self.transaction_level = self.connector.BeginTrans()

But of course I also had to re-implement the adodbapi.connect to use my
Connection class (is there a better way?).

I think what I'm getting at is that allowing the caller to change the
autocommit attribute to False on the instance but not beginning a trans (as
would happen if the autocommit = False was passed in connect()) seems
inconsistent.


On Mon, Oct 24, 2016 at 9:00 AM, <python-win32-request at python.org> wrote:

> Send python-win32 mailing list submissions to
>         python-win32 at python.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>         https://mail.python.org/mailman/listinfo/python-win32
> or, via email, send a message with subject or body 'help' to
>         python-win32-request at python.org
>
> You can reach the person managing the list at
>         python-win32-owner at python.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of python-win32 digest..."
>
> Today's Topics:
>
>    1. Re: adodbapi changing autocommit (Tim Roberts)
>
>
> ---------- Forwarded message ----------
> From: Tim Roberts <timr at probo.com>
> To: "python-win32 at python.org" <python-win32 at python.org>
> Cc:
> Date: Sun, 23 Oct 2016 14:59:27 -0700
> Subject: Re: [python-win32] adodbapi changing autocommit
> On Oct 22, 2016, at 9:42 PM, Max Slimmer III <maxslimmer at gmail.com> wrote:
> >
> > Setting connection.autocommit = False does not cause a
> > connection.connector.BeginTrans() and so any subsequent
> > connection.commit() raises an exception that there is no open
> > transaction. Is this by design and I'm supposed to explicitly call
> > BeginTrans() when switching autocommit off?
>
> Yes, that's exactly the tradeoff.  If you have auto commit on, ADO will
> wrap each operation in a transaction.  If you have auto commit off, then
> you have to insert the transaction markers yourself.
>> Tim Roberts, timr at probo.com
> Providenza & Boekelheide, Inc.
>
>
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> https://mail.python.org/mailman/listinfo/python-win32
>
>


-- 
--Max III
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-win32/attachments/20161024/4dcfb751/attachment.html>


More information about the python-win32 mailing list