On 15 Sty, 05:33, James Bennett <ubernost...@gmail.com> wrote:
> On Thu, Jan 14, 2010 at 10:26 PM, Kieran Brownlees <kbrownl...@gmail.com> 
> wrote:
> > Basic example of format:
> > Main Thread: print objects.all()
> > Spawned Thread: print objects.all() -- same as main thread
> > Main Thread: objects.create(newObj)
> > Main Thread: print.objects.all() -- correct queryset, original + new
> > Spawned Thread: print objects.all() -- only contains the original
> > objects, not the new one?
>
> This would be the expected result with the default transaction
> isolation of most databases, and has nothing to do with threading.
>

To be more explicit - Python DB API spec states that connection
should, by default, have autocommit turned on - which means that there
is always an ongoing transaction at DB level.

Now, for MySQL backend, which I'm most familiar with,
default isolation level is REPEATABLE READ, which means
that first access to given table freezes its state for the duration
of current transaction.

And because Django default behaviour is @autocommit,
i.e. it doesn't issue any COMMIT/ROLLBACK statements
for fetches, only for writes, all subsequent queries results
in the same queryset (in terms of elements, not object id).

--
Tomasz Zielinski
http://pyconsultant.eu
-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.


Reply via email to