Thanks michael,
Could you please explain, how  sqlalchemy overriding the global variable
'Session' inside the threads.

How Transaction.Commit() inside the thread commit only the objects
associated with overrided 'Session'
Just for learning.

Thanks
On Oct 10, 2013 11:42 PM, "Michael Bayer" <[email protected]> wrote:

> threading.local() isn't a global registry.  the threading.local() you want
> is here:
>
> Session = scoped_session(sessionmaker())
>
> registry = Session.registry
>
> the_threading_local = registry.registry
>
> there is no need to directly access this threading local.   Source for
> this activity is first in scoped_session:
>
>
> https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/orm/scoping.py#L16
>
> then ThreadLocalRegistry:
>
>
> https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/util/_collections.py#L917
>
>
>
>
>
> On Oct 10, 2013, at 11:29 AM, sajuptpm <[email protected]> wrote:
>
> Could someone please explain, Howto sqlalchemy creating new Session and
> connection inside the thread.
> Please check the attached programme and output.
>
> I went through the doc http://docs.sqlalchemy.org/en/**
> latest/orm/session.html#**thread-local-scope<http://docs.sqlalchemy.org/en/latest/orm/session.html#thread-local-scope>
>
> and find that sqlalchemy using "threading.local()" to do this magic, but I
> could not seen any thing in "threading.local()" (see output of the
> programme)
>
>
>
> *####### Test Code and Output #######*
>
> from sqlalchemy import *
> from sqlalchemy.orm import *
> from sqlalchemy.ext.declarative import declarative_base
> Base = declarative_base()
>
> e = create_engine("mysql://root:
> **xxxxx@localhost/xxxxx")
> Session = scoped_session(sessionmaker(e)**)
>
> import threading
> from functools import wraps
> def find_connection_id_deco(func):
>     """
>     """
>     @wraps(func)
>     def wrap1(*args, **kwargs):
>         """
>         """
>         gls = func.__globals__
>         _DBSession = gls.get("Session")
>         if _DBSession:
>             res1 = _DBSession.connection().**execute("SELECT
> connection_id()")
>             if res1:
>                 conn_id = res1.fetchone()[0]
>                 print "@@@@%s===%s()===conn_id_1===%**s===%s===%s===%s==="
> \
>                 %(func.func_code.co_filename, func.__name__, conn_id,
> vars(threading.local()),\
>                     threading.currentThread().**getName(),
> threading.currentThread().**ident)
>         return func(*args, **kwargs)
>     return wrap1
>
>
> @find_connection_id_deco
> def test1():
>     """
>     """
>     print "test1"
>
>
> @find_connection_id_deco
> def test2():
>     """
>     """
>     print "test2"
>
>
>
> from threading import Thread
> test1()
> thread = Thread(target=test2)
> thread.start()
>
>
> *OUTPUT
> #######*
> @@@@cvt_test_script.py===**test1()===conn_id_1===661==={}**
> ===MainThread===**139917239523072===
> test1
> @@@@cvt_test_script.py===**test2()===conn_id_1===662==={}**
> ===Thread-1===139917193123584=**==
> test2
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to