[BangPypers] [SQLAlchemy R&D] Working of Session in thread

konark modi modi.konark at gmail.com
Thu Oct 10 19:25:17 CEST 2013


Hi Saju,

I have not much worked on SQLAlchemy sessions, but this can be of your help
: http://pyvideo.org/video/1767/the-sqlalchemy-session-in-depth-0

Regards
Konark


On Thu, Oct 10, 2013 at 8:55 PM, Saju M <sajuptpm at gmail.com> 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
>
> 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
>
>
>
> Regards
> Saju Madhavan
> +91 09535134654
> _______________________________________________
> BangPypers mailing list
> BangPypers at python.org
> https://mail.python.org/mailman/listinfo/bangpypers
>


More information about the BangPypers mailing list