Hi Tore,

You should be able to get what you want be replacing your commits by

        connection.cursor.execute("commit"); transaction.rollback()

or equivalents (caveat: untested).

This looks like a very hackish thing to do, code I wouldn't put in production. 
And it should.

Shai.

On Saturday 05 March 2016 21:21:27 Tore Lundqvist wrote:
> Thanks for the suggestion!
> I have been thinking of workarounds with multiple db aliases and it would
> solve the problem I described but in reality the code I'm working with is
> much more complex and has around 400 explicit commits. It all worked great
> in Django 1.4 but since we upgraded to 1.8 (and got the new transaction
> management) I have been forced to make ugly workarounds and patch Django
> this time.
> 
> Den lördag 5 mars 2016 kl. 19:41:59 UTC+1 skrev jdunck:
> > I've had this scenario before - you have two interleaving units of work
> > (through composition of code from different sources or concerns).  You
> > want progress recorded for one unit of work, but perhaps not the other. 
> > Without django, you'd have two open connections.  In my experience the
> > simplest way to accommodate this is to have two DB aliases pointed at
> > the same DB.  Set one to be a test mirror of the other.  Use different
> > aliased connections for the two concerns.  Then you can use atomic (as
> > suggested and typical).
> > 
> > On Fri, Mar 4, 2016 at 2:11 PM, Tore Lundqvist <t...@mima.x.se
> > 
> > <javascript:>> wrote:
> >> I don't what all updates to be in one commit each so I can't wrap just
> >> the update with a atomic block I would need to have it over a bigger
> >> chuck of code. That chunk might call a subrutin that also needs a
> >> commit and if I wrap that update in a atomic block that atomic block is
> >> nested and results in a save point which is useless.
> >> 
> >> Den fredag 4 mars 2016 kl. 22:46:30 UTC+1 skrev Aymeric Augustin:
> >>> If you do what Simon and I suggest, you should get the result you just
> >>> described. If you don’t, please explain what happens.
> >>> 
> >>> Within a transaction — and disabling autocommit means you’re within a
> >>> transaction — transaction.atomic() uses savepoints.
> >>> 
> >>> Note that in Django 1.6, after set_autocommit(False), you couldn’t use
> >>> transaction.atomic(). That was fixed in 1.8 (I think).
> >>> 
> >>> 
> >>> On 04 Mar 2016, at 21:21, Tore Lundqvist <t...@mima.x.se> wrote:
> >>> 
> >>> Hi, Simon
> >>> 
> >>> No, I would need to wrap everything i a atomic block to start the
> >>> transaction and it's only when that outermost atomic block exits that I
> >>> actually get a commit the nested ones just makes save point.
> >>> 
> >>> /Tore
> >>> 
> >>> Den fredag 4 mars 2016 kl. 21:09:17 UTC+1 skrev charettes:
> >>>> Hi Tore,
> >>>> 
> >>>> Is there a reason you can't simply wrap your updates in a
> >>>> `transaction.atomic()` blocks?
> >>>> 
> >>>> You should be able to avoid deadlocks and control exactly when data is
> >>>> written to disk
> >>>> with this construct.
> >>>> 
> >>>> Simon
> >>>> 
> >>>> Le vendredi 4 mars 2016 15:02:45 UTC-5, Tore Lundqvist a écrit :
> >>>>> Reply to comments in ticket:
> >>>>> https://code.djangoproject.com/ticket/26323#comment:10
> >>>>> 
> >>>>> Hi,
> >>>>> 
> >>>>> @Aagustin: I get your point but in the code I'm working on there is a
> >>>>> lot of transaction.commit(), not to handle transactions but to manage
> >>>>> when data is written to disk and to avoid deadlocks. Running in
> >>>>> autocommit mode does not work, its slow and sometimes the commits is
> >>>>> used to save in a known good state. So I disable autocommit with
> >>>>> transaction.set_autocommit(False) and run the code with explicit
> >>>>> commits in it and than turn autocommit on again.
> >>>>> 
> >>>>> The documentation for set_autocommit says "Once you turn autocommit
> >>>>> off, you get the default behavior of your database adapter, and
> >>>>> Django won’t help you." That is what I want and thats way I think
> >>>>> that the TransactionManagementError should not de raise if your not
> >>>>> using atomic blocks.
> >> 
> >> You received this message because you are subscribed to the Google
> >> Groups "Django developers (Contributions to Django itself)" group.
> >> To unsubscribe from this group and stop receiving emails from it, send
> >> an email to django-develop...@googlegroups.com <javascript:>.
> >> To post to this group, send email to django-d...@googlegroups.com
> >> <javascript:>.
> >> Visit this group at https://groups.google.com/group/django-developers.
> >> To view this discussion on the web visit
> >> https://groups.google.com/d/msgid/django-developers/79611d30-21e0-45bc-8
> >> ab7-8754a39db4fc%40googlegroups.com
> >> <https://groups.google.com/d/msgid/django-developers/79611d30-21e0-45bc
> >> -8ab7-8754a39db4fc%40googlegroups.com?utm_medium=email&utm_source=footer
> >> > .
> >> 
> >> For more options, visit https://groups.google.com/d/optout.

Reply via email to