Hi,

Sorry for the delay. Marking the DBsession dirty after a non ORM operation 
works for now.

Zope.sqlalchemy.mark_changed(DBSession())

Thanks for the info Simon

Srikanth Bemineni

On Tuesday, November 29, 2016 at 9:10:32 AM UTC-6, Mike Bayer wrote:
>
> Hi Srikanth, answers inline. 
>
> On 11/28/2016 10:04 PM, Srikanth Bemineni wrote: 
> > Hi Mike, 
> > 
> > I am using pyramid_tm as transaction manager which is part of the 
> > pyramid framework. Is this the third party transaction manager that you 
> > are mentioning about ?. 
>
> That, as well as zope.transaction, yes. 
>
>
>   Can you please tell us how pyramid_tm, 
> > ZopeTransacationExtension and sqlachemy come together. 
>
> I'm not familiar with how pyramid_tm and ZopeTransactionExtension 
> interact specifically, you'd want to talk to the Pyramid list for that 
> (or Simon here seems to know more about it than me). 
> ZopeTransactionExtension makes use of public event hooks within the 
> SQLAlchemy Session to take control of the scope of a database 
> transaction, it mediates the SQL database transaction management of 
> SQLAlchemy Session with the more generic "transaction" of Pyramid.  That 
> is, SQLAlchemy's transaction becomes an implementation detail. 
>
>
> Why are they so 
> > many layers for a simple transactions.?. 
>
> This is a design decision made by the Pyramid framework.  The 
> transactional concept in Pyramid encompasses many more aspects than just 
> SQL database transactions, and can join together the SQL database 
> transaction with lots of other things like other kinds of datastores, 
> sending emails, things like that. 
>
> The Pyramid devs will also tell you that usage of pyramid_tm and all of 
> that is entirely optional in Pyramid, although they are common.  Other 
> frameworks such as Flask have a much thinner interaction layer in the 
> area of transactions as well. 
>
>
>   When they are  so many 
> > libraries involved, may be I need to post this question in multiple 
> > forums to get all the answers?. 
>
> I would stress that you as the developer are free to choose which 
> interaction layers you want to use and which are not necessary.   Using 
> more layers does mean you have more of an up-front learning curve, with 
> the benefit being potentially cleaner design once your application has 
> shown it makes use of these features. 
>
>
>
> If there are any pyramid experts please 
> > let me know what is  happening here ? 
> > 
> > http://docs.pylonsproject.org/projects/pyramid_tm/en/latest/ 
> > 
> > with session_shardid(DBSession,table_hash): 
> > Base.metadata.create_all(DBSession.connection()) 
> > self.request.tm.commit()  -> This also doesn't help all the statements 
> > just roll back. 
> > 
> > Srikanth Bemineni 
> > 
> > 
> > 
> > 
> > On Monday, November 28, 2016 at 8:28:22 AM UTC-6, Mike Bayer wrote: 
> > 
> > 
> > 
> >     On 11/27/2016 09:24 AM, Srikanth Bemineni wrote: 
> >     > Hi Mike, 
> >     > 
> >     > I even tried flushing and committing the transaction. But still 
> >     the same 
> >     > issue. I was trying to figure out why is getting rolled back. 
> >     Please see 
> >     > the below stack trace 
> > 
> > 
> >     that rollback is normal when the connection is returned to the 
> >     connection pool.  you are still not getting your Session committed. 
> >     Because you are using ZopeTransactionExtension it probably is 
> managing 
> >     the transaction on the Connection externally to the Session.   You 
> need 
> >     to use your chosen third party transaction commit facilities here to 
> >     ensure all transactions are committed (or don't use that tool if it 
> is 
> >     making things more difficult). 
> > 
> >     Alternatively, for the CREATE you can metadata.create_all() on the 
> >     connection: 
> > 
> > 
> >     with engine.connect() as conn: 
> >          conn.info <http://conn.info>['whatever token you need'] = 'the 
> >     token' 
> >          metadata.create_all(conn) 
> > 
> > 
> > 
> > 
> > 
> >     > 
> >     > 
> >     > | 
> >     > 
> >     > 
> >     > 
> >     
> DBSession=scoped_session(sessionmaker(extension=ZopeTransactionExtension())) 
>
> > 
> >     > 
> >     > 
> >     > 
> >     > withsession_shardid(DBSession,table_hash): 
> >     >  Base.metadata.create_all(DBSession.connection()) 
> >     >  DBSession.flush() 
> >     >  transaction.commit() 
> >     > 
> >     > 
> >     > Wasanalyzing why it isgetting rolled back.Startedwitha trace. 
> >     > 
> >     > 
> >     > Traceback(most recent call last): 
> >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/pool.py",line
>  
>
> > 
> >     > 687,in_finalize_fairy 
> >     >     fairy._reset(pool) 
> >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/pool.py",line
>  
>
> > 
> >     > 827,in_reset 
> >     >     self._reset_agent.rollback() 
> >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/engine/base.py",line
>  
>
> > 
> >     > 1614,inrollback 
> >     >     self._do_rollback() 
> >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/engine/base.py",line
>  
>
> > 
> >     > 1652,in_do_rollback 
> >     >     self.connection._rollback_impl() 
> >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/engine/base.py",line
>  
>
> > 
> >     > 694,in_rollback_impl 
> >     >     tb =traceback.format_exc() 
> >     > 
> >     > 
> >     > 
> >     > 
> >     > def_rollback_impl(self): 
> >     >         assertnotself.__branch_from 
> >     >         importtraceback 
> >     >         tb =traceback.format_exc() 
> >     > 
> >     > 
> >     >         ifself._has_events orself.engine._has_events: 
> >     >             self.dispatch.rollback(self) 
> >     > 
> >     > 
> >     >         *ifself._still_open_and_connection_is_valid: 
> >     >             ifself._echo: 
> >     >                 self.engine.logger.info 
> >     <http://self.engine.logger.info>("ROLLBACK") 
> >     >             try:* 
> >     >                 self.engine.dialect.do_rollback(self.connection) 
> >     >             exceptBaseExceptionase: 
> >     >                 
> self._handle_dbapi_exception(e,None,None,None,None) 
> >     >             finally: 
> >     >                 ifnotself.__invalid and\ 
> >     >                         self.connection._reset_agent 
> >     isself.__transaction: 
> >     >                     self.connection._reset_agent =None 
> >     >                 self.__transaction =None 
> >     >         else: 
> >     >             self.__transaction =None 
> >     > 
> >     > | 
> >     > 
> >     > 
> >     > 
> >     > 
> >     > On Sunday, November 27, 2016 at 7:53:23 AM UTC-6, Mike Bayer 
> wrote: 
> >     > 
> >     >     you need to call commit() on a Session in order for the 
> >     transaction to 
> >     >     be committed. 
> >     > 
> >     >     Also you should be able to attach session events to the 
> >     scoped_session 
> >     >     object directly, the session event structure will extract the 
> >     >     underlying 
> >     >     sessionmaker class as the target. 
> >     > 
> >     > 
> >     > 
> >     >     On 11/26/2016 01:56 PM, Srikanth Bemineni wrote: 
> >     >     > Hi, 
> >     >     > 
> >     >     > May be I celebrated little bit too early. It looks like for 
> no 
> >     >     obvious 
> >     >     > reason the scoped_session rolls back the transaction right 
> >     at the 
> >     >     last 
> >     >     > moment. Any idea on how to debug this ? 
> >     >     > 
> >     >     > | 
> >     >     > View.py 
> >     >     > 
> >     >     > withsession_shardid(DBSession(),table_hash): 
> >     >     >   Base.metadata.create_all(DBSession().connection()) 
> >     >     > 
> >     >     > Base.metadata.create_all()-->works fine 
> >     >     > 
> >     >     > 2016-11-2612:38:13,681INFO 
> >     >     >  [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker4Core0'] 
> >     >     > CREATE TABLE group_order_ba6bd213 ( 
> >     >     >  gtid SERIAL NOT NULL, 
> >     >     >  group_id INTEGER NOT NULL, 
> >     >     >  title TEXT NOT NULL, 
> >     >     >  description TEXT, 
> >     >     >  created_at TIMESTAMP WITHOUT TIME ZONE, 
> >     >     >  updated_at TIMESTAMP WITHOUT TIME ZONE, 
> >     >     >  PRIMARY KEY (gtid), 
> >     >     >  FOREIGN KEY(group_id)REFERENCES "group"(gid)ON DELETE 
> CASCADE, 
> >     >     >  FOREIGN KEY(user_id)REFERENCES youzer (uid)ON DELETE 
> CASCADE 
> >     >     > ) 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     > 2016-11-2612:38:13,682INFO 
> >     >     > 
>  [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker4Core0']{} 
> >     >     > Inside_apply_shard_id 
> >     >     > {'shard':'ba6bd213'} 
> >     >     > 2016-11-2612:38:13,695INFO 
> >     >     > 
> >      [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker4Core0']CREATE 
> >     >     INDEX 
> >     >     > group_order_ba6bd213_index1 ON group_order_ba6bd213 
> >     >     (group_id,user_id) 
> >     >     > 2016-11-2612:38:13,695INFO 
> >     >     > 
>  [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker4Core0']{} 
> >     >     > 2016-11-2612:38:13,705INFO 
> >     >     > 
> >      [sqlalchemy.engine.base.Engine:699][b'uWSGIWorker4Core0']ROLLBACK 
> >     >     > | 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     > On Saturday, November 26, 2016 at 9:10:23 AM UTC-6, Srikanth 
> >     >     Bemineni wrote: 
> >     >     > 
> >     >     >     Hi, 
> >     >     > 
> >     >     >     Hope this helps others 
> >     >     > 
> >     >     >     1. DBSession is scoped_session. Use DBSession() to get 
> >     the actual 
> >     >     >     session 
> >     >     >         https://pypi.python.org/pypi/zope.sqlalchemy 
> >     <https://pypi.python.org/pypi/zope.sqlalchemy> 
> >     >     <https://pypi.python.org/pypi/zope.sqlalchemy 
> >     <https://pypi.python.org/pypi/zope.sqlalchemy>> 
> >     >     >     <https://pypi.python.org/pypi/zope.sqlalchemy 
> >     <https://pypi.python.org/pypi/zope.sqlalchemy> 
> >     >     <https://pypi.python.org/pypi/zope.sqlalchemy 
> >     <https://pypi.python.org/pypi/zope.sqlalchemy>>> 
> >     >     > 
> >     >     >     with session_shardid(DBSession(),table_hash): 
> >     >     >       Base.metadata.create_all(DBSession().connection()) 
> >     >     > 
> >     >     >     2. AttributeError: 'SessionTransaction' object has no 
> >     >     attribute '_iterate_parents' 
> >     >     >         This is a bug in zope.sqlalchemy. I was using 7.6. 
> >     This is 
> >     >     fixed 
> >     >     >     in 7.7 
> >     >     > 
> >     >     https://github.com/zopefoundation/zope.sqlalchemy/issues/15 
> >     <https://github.com/zopefoundation/zope.sqlalchemy/issues/15> 
> >     >     <https://github.com/zopefoundation/zope.sqlalchemy/issues/15 
> >     <https://github.com/zopefoundation/zope.sqlalchemy/issues/15>> 
> >     >     > 
> >     <https://github.com/zopefoundation/zope.sqlalchemy/issues/15 
> >     <https://github.com/zopefoundation/zope.sqlalchemy/issues/15> 
> >     >     <https://github.com/zopefoundation/zope.sqlalchemy/issues/15 
> >     <https://github.com/zopefoundation/zope.sqlalchemy/issues/15>>> 
> >     >     > 
> >     >     >     Hi Mike, 
> >     >     > 
> >     >     >     There is small issue in the recipe. May be we need to 
> >     replace the 
> >     >     >     parameter also, if we it contains table names 
> >     >     > 
> >     >     >     | 
> >     >     >     2016-11-2608:52:08,628INFO 
> >     >     > 
> >     > 
> >     
>  [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker3Core0']selectrelname 
> > 
> >     > 
> >     >     >     frompg_class c join pg_namespace n on 
> n.oid=c.relnamespace 
> >     >     > 
> >     wherepg_catalog.pg_table_is_visible(c.oid)andrelname=%(name)s 
> >     >     >     2016-11-2608:52:08,628INFO 
> >     >     > 
> >     > 
> >     
>  
> [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker3Core0']{'name':'group_order_shardid_'}
>  
>
> > 
> >     > 
> >     >     > 
> >     >     > 
> >     >     >     I need to replace the parameters so that it checks the 
> >     proper 
> >     >     table 
> >     >     >     name before creating it 
> >     >     > 
> >     >     > 
> >     >     >     2016-11-2608:52:08,628INFO 
> >     >     > 
> >     > 
> >     
>  [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker3Core0']selectrelname 
> > 
> >     > 
> >     >     >     frompg_class c join pg_namespace n on 
> n.oid=c.relnamespace 
> >     >     > 
> >     wherepg_catalog.pg_table_is_visible(c.oid)andrelname=%(name)s 
> >     >     >     2016-11-2608:52:08,628INFO 
> >     >     > 
> >     > 
> >     
>  
> [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker3Core0']{'name':'group_order_ba6bd213'}
>  
>
> > 
> >     > 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     >     
> def_apply_shard_id(connection,cursor,statement,parameters, 
> >     >     > 
> >     context,executemany): 
> >     >     >         """Apply a "shard id" to statements. 
> >     >     > 
> >     >     > 
> >     >     >         Similar to the comment listener, we alter the 
> >     statement on 
> >     >     the 
> >     >     >         fly replacing occurrences of "_shard_" with the 
> current 
> >     >     "shard id". 
> >     >     > 
> >     >     > 
> >     >     >         """ 
> >     >     >         session_info =connection.info.get('session_info',{}) 
> >     >     >         print(session_info) 
> >     >     >         if"shard"insession_info: 
> >     >     >             statement 
> >     >     =statement.replace("_shardid_",session_info["shard"]) 
> >     >     >             forparam,value inparameters.items(): 
> >     >     >             ifisinstance(value,str): 
> >     >     > 
> >     >     > 
> >     > 
> >     parameters[param]=value.replace("_shardid_",session_info["shard"]) 
> >     >     > 
> >     >     > 
> >     >     >         returnstatement,parameters 
> >     >     > 
> >     >     >     | 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     >     On Friday, November 25, 2016 at 10:14:31 PM UTC-6, 
> Srikanth 
> >     >     Bemineni 
> >     >     >     wrote: 
> >     >     > 
> >     >     >         Hi, 
> >     >     > 
> >     >     >         Sorry some of the debug trace was missing from the 
> >     >     previous post 
> >     >     > 
> >     >     >         | 
> >     >     > 
> >     >     > 
> >     >     >         WSGI app 0(mountpoint='')ready in2seconds on 
> >     interpreter 
> >     >     >         0x15dc190pid:10256(defaultapp) 
> >     >     >         Insidesession_shardid 
> >     >     >         *<sqlalchemy.orm.scoping.scoped_session objectat 
> >     >     0x7fe70702bdd8>* 
> >     >     >         2016-11-2521:34:50,808INFO 
> >     >     > 
> >     > 
> >     
>  [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker2Core0']selectversion() 
> > 
> >     > 
> >     >     >         2016-11-2521:34:50,808INFO 
> >     >     > 
> >      [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker2Core0']{} 
> >     >     >         2016-11-2521:34:50,809INFO 
> >     >     > 
> >     > 
> >     
>  
> [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker2Core0']selectcurrent_schema()
>  
>
> > 
> >     > 
> >     >     >         2016-11-2521:34:50,810INFO 
> >     >     > 
> >      [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker2Core0']{} 
> >     >     >         2016-11-2521:34:50,811INFO 
> >     >     > 
> >     >     
>  [sqlalchemy.engine.base.Engine:1235][b'uWSGIWorker2Core0']SELECT 
> >     >     CAST('test 
> >     >     >         plain returns'AS VARCHAR(60))AS anon_1 
> >     >     >         2016-11-2521:34:50,811INFO 
> >     >     > 
> >      [sqlalchemy.engine.base.Engine:1236][b'uWSGIWorker2Core0']{} 
> >     >     >         2016-11-2521:34:50,811INFO 
> >     >     > 
> >     >     
>  [sqlalchemy.engine.base.Engine:1235][b'uWSGIWorker2Core0']SELECT 
> >     >     CAST('test 
> >     >     >         unicode returns'AS VARCHAR(60))AS anon_1 
> >     >     >         2016-11-2521:34:50,812INFO 
> >     >     > 
> >      [sqlalchemy.engine.base.Engine:1236][b'uWSGIWorker2Core0']{} 
> >     >     >         2016-11-2521:34:50,812INFO 
> >     >     > 
> >     >     
>  [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker2Core0']show 
> >     >     >         standard_conforming_strings 
> >     >     >         2016-11-2521:34:50,812INFO 
> >     >     > 
> >      [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker2Core0']{} 
> >     >     >         2016-11-2521:34:50,813INFO 
> >     >     > 
> >     > 
> >     
>  [sqlalchemy.engine.base.Engine:679][b'uWSGIWorker2Core0']BEGIN(implicit) 
> > 
> >     > 
> >     >     >         Inside__connection_for_session 
> >     >     >         <sqlalchemy.engine.base.Connectionobjectat 
> >     0x7fe70093b940> 
> >     >     >         *<sqlalchemy.orm.session.Sessionobjectat 
> >     0x7fe701b9dc88>* 
> >     >     >         2016-11-2521:34:50,815ERROR 
> >     >     > 
> >     [pyramid_debugtoolbar:227][b'uWSGIWorker2Core0']Exceptionat 
> >     >     >         http://localhost:9090/group_debug 
> >     <http://localhost:9090/group_debug> 
> >     >     <http://localhost:9090/group_debug 
> >     <http://localhost:9090/group_debug>> 
> >     >     >         traceback 
> >     >     > 
> >     > 
> >     url:
> http://localhost:9090/_debug_toolbar/exception?token=62272d5c7863305c7830665c78393224765c7838335c786662265c78666427&tb=140630123854312
>  
> >     <
> http://localhost:9090/_debug_toolbar/exception?token=62272d5c7863305c7830665c78393224765c7838335c786662265c78666427&tb=140630123854312>
>  
>
> > 
> >     > 
> >     <
> http://localhost:9090/_debug_toolbar/exception?token=62272d5c7863305c7830665c78393224765c7838335c786662265c78666427&tb=140630123854312
>  
> >     <
> http://localhost:9090/_debug_toolbar/exception?token=62272d5c7863305c7830665c78393224765c7838335c786662265c78666427&tb=140630123854312>>
>  
>
> > 
> >     > 
> >     >     >         Traceback(most recent call last): 
> >     >     >           .... 
> >     >     >           File"./medicscity/views/group.py",line 
> >     144,ingroup_debug 
> >     >     >             Base.metadata.create_all(DBSession.connection()) 
> >     >     > 
> >     >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/orm/scoping.py",line
>  
>
> > 
> >     > 
> >     >     >         157,indo 
> >     >     >             
> returngetattr(self.registry(),name)(*args,**kwargs) 
> >     >     > 
> >     >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/orm/session.py",line
>  
>
> > 
> >     > 
> >     >     >         966,inconnection 
> >     >     >             execution_options=execution_options) 
> >     >     > 
> >     >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/orm/session.py",line
>  
>
> > 
> >     > 
> >     >     >         971,in_connection_for_bind 
> >     >     >             engine,execution_options) 
> >     >     > 
> >     >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/orm/session.py",line
>  
>
> > 
> >     > 
> >     >     >         417,in_connection_for_bind 
> >     >     > 
> >     self.session.dispatch.after_begin(self.session,self,conn) 
> >     >     > 
> >     >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/sqlalchemy/event/attr.py",line
>  
>
> > 
> >     > 
> >     >     >         256,in__call__ 
> >     >     >             fn(*args,**kw) 
> >     >     > 
> >     >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/zope.sqlalchemy-0.7.6-py3.4.egg/zope/sqlalchemy/datamanager.py",line
>  
>
> > 
> >     > 
> >     >     >         231,inafter_begin 
> >     >     > 
> >     >     > 
> >     > 
> >     
> join_transaction(session,self.initial_state,self.transaction_manager,self.keep_session)
>  
>
> > 
> >     > 
> >     >     > 
> >     >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/zope.sqlalchemy-0.7.6-py3.4.egg/zope/sqlalchemy/datamanager.py",line
>  
>
> > 
> >     > 
> >     >     >         205,injoin_transaction 
> >     >     > 
> >     >     > 
> >     > 
> >     
> DataManager(session,initial_state,transaction_manager,keep_session=keep_session)
>  
>
> > 
> >     > 
> >     >     > 
> >     >     > 
> >     > 
> >     
> File"/home/izero/devel/medics_city/medics_city_env/lib/python3.4/site-packages/zope.sqlalchemy-0.7.6-py3.4.egg/zope/sqlalchemy/datamanager.py",line
>  
>
> > 
> >     > 
> >     >     >         65,in__init__ 
> >     >     >             self.tx 
> =session.transaction._iterate_parents()[-1] 
> >     >     >         AttributeError:'SessionTransaction'objecthas 
> >     noattribute 
> >     >     >         '_iterate_parents' 
> >     >     >         | 
> >     >     > 
> >     >     > 
> >     >     >         On Friday, November 25, 2016 at 10:12:18 PM UTC-6, 
> >     Srikanth 
> >     >     >         Bemineni wrote: 
> >     >     > 
> >     >     >             Hi, 
> >     >     > 
> >     >     >             I was not using the DBSession.connection() while 
> >     creating 
> >     >     >             the tables when invoking the create_all function 
> >     on the 
> >     >     >             metadata. After fixing that issue I end with an 
> >     another 
> >     >     >             issue. It looks like the 
> >     session(scoped_session), where I 
> >     >     >             set the shard id, and the session that I 
> >     receive, when 
> >     >     the 
> >     >     >             shard id is moved to the connection(after_begin 
> >     event 
> >     >     >             received by _connection_for_session) are 
> different, 
> >     >     even if 
> >     >     >             I am using the same scoped_session. How can I 
> >     get the 
> >     >     >             session that is inside the scoped_session to set 
> >     the 
> >     >     info ? 
> >     >     > 
> >     >     >             | 
> >     >     >             app __init__.py 
> >     >     > 
> >     >     >             engine 
> =engine_from_config(settings,'sqlalchemy.') 
> >     >     > 
> >     > 
> >     
> DBSession=scoped_session(sessionmaker(extension=ZopeTransactionExtension())) 
>
> > 
> >     > 
> >     >     >             DBSession.configure(bind=engine) 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     >             connectionsetup.py 
> >     >     > 
> >     >     >             @listens_for(DBSession,"after_begin") 
> >     >     > 
> >     def_connection_for_session(session,trans,connection): 
> >     >     >                 """Share the 'info' dictionary of Session 
> with 
> >     >     Connection 
> >     >     >                 objects. 
> >     >     >                 This occurs as new Connection objects are 
> >     associated 
> >     >     >             with the 
> >     >     >                 Session.   The .info dictionary on 
> >     Connection is 
> >     >     local 
> >     >     >             to the 
> >     >     >                 DBAPI connection. 
> >     >     >                 """ 
> >     >     >                 print("Inside __connection_for_session") 
> >     >     >                 print(connection) 
> >     >     >                 print(session) 
> >     >     >                 connection.info <http://connection.info> 
> >     >     <http://connection.info>['session_info']=session.info 
> >     <http://session.info> 
> >     >     <http://session.info> 
> >     >     > 
> >     >     > 
> >     >     >             @contextmanager 
> >     >     >             defsession_shardid(session,shardid): 
> >     >     >                 """Apply the "shard" id to all SQL emitted 
> >     by the 
> >     >     given 
> >     >     >             Session. 
> >     >     >                 """ 
> >     >     >                 print("Inside session_shardid") 
> >     >     >                 print(session) 
> >     >     >                 session.info <http://session.info> 
> >     <http://session.info>["shard"]=shardid 
> >     >     >                 yield 
> >     >     >                 delsession.info <http://delsession.info> 
> >     <http://delsession.info>["shard"] 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     > 
> >     >     >             View.py 
> >     >     > 
> >     >     >             withsession_shardid(DBSession,table_hash): 
> >     >     >               
> Base.metadata.create_all(DBSession.connection()) 
> >     >     > 
> >     >     > 
> >     >     >             WSGI app 0(mountpoint='')ready in2seconds on 
> >     interpreter 
> >     >     >             0x15dc190pid:10256(defaultapp) 
> >     >     >             Insidesession_shardid 
> >     >     >             <sqlalchemy.orm.scoping.scoped_session objectat 
> >     >     0x7fe70702bdd8> 
> >     >     >             2016-11-2521:34:50,808INFO 
> >     >     > 
> >     > 
> >     
>  [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker2Core0']selectversion() 
> > 
> >     > 
> >     >     >             2016-11-2521:34:50,808INFO 
> >     >     > 
> >     >      [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker2Core0']{} 
> >     >     >             2016-11-2521:34:50,809INFO 
> >     >     > 
> >     > 
> >     
>  
> [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker2Core0']selectcurrent_schema()
>  
>
> > 
> >     > 
> >     >     >             2016-11-2521:34:50,810INFO 
> >     >     > 
> >     >      [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker2Core0']{} 
> >     >     >             2016-11-2521:34:50,811INFO 
> >     >     > 
> >     >     
>  [sqlalchemy.engine.base.Engine:1235][b'uWSGIWorker2Core0']SELECT 
> >     >     >             CAST('test plain returns'AS VARCHAR(60))AS 
> anon_1 
> >     >     >             2016-11-2521:34:50,811INFO 
> >     >     > 
> >     >      [sqlalchemy.engine.base.Engine:1236][b'uWSGIWorker2Core0']{} 
> >     >     >             2016-11-2521:34:50,811INFO 
> >     >     > 
> >     >     
>  [sqlalchemy.engine.base.Engine:1235][b'uWSGIWorker2Core0']SELECT 
> >     >     >             CAST('test unicode returns'AS VARCHAR(60))AS 
> anon_1 
> >     >     >             2016-11-2521:34:50,812INFO 
> >     >     > 
> >     >      [sqlalchemy.engine.base.Engine:1236][b'uWSGIWorker2Core0']{} 
> >     >     >             2016-11-2521:34:50,812INFO 
> >     >     > 
> >     >     
>  [sqlalchemy.engine.base.Engine:1140][b'uWSGIWorker2Core0']show 
> >     >     >             standard_conforming_strings 
> >     >     >             2016-11-2521:34:50,812INFO 
> >     >     > 
> >     >      [sqlalchemy.engine.base.Engine:1143][b'uWSGIWorker2Core0']{} 
> >     >     >             2016-11-2521:34:50,813INFO 
> >     >     > 
> >     > 
> >     
>  [sqlalchemy.engine.base.Engine:679][b'uWSGIWorker2Core0']BEGIN(implicit) 
> > 
> >     > 
> >     >     >             Inside__connection_for_session 
> >     >     >             <sqlalchemy.engine.base.Connectionobjectat 
> >     >     0x7fe70093b940> 
> >     >     >             <sqlalchemy.orm.session.Sessionobjectat 
> >     0x7fe701b9dc88> 
> >     >     >             2016-11-2521:34:50,815ERROR 
> >     >     >             [pyramid_debugtoolbar:227][b<span style="color: 
> >     #080;" 
> >     >     >             class="styled-by 
> >     >     >             | 
> >     >     > 
> >     >     > -- 
> >     >     > SQLAlchemy - 
> >     >     > The Python SQL Toolkit and Object Relational Mapper 
> >     >     > 
> >     >     > http://www.sqlalchemy.org/ 
> >     >     > 
> >     >     > To post example code, please provide an MCVE: Minimal, 
> >     Complete, and 
> >     >     > Verifiable Example. See http://stackoverflow.com/help/mcve 
> >     <http://stackoverflow.com/help/mcve> 
> >     >     <http://stackoverflow.com/help/mcve 
> >     <http://stackoverflow.com/help/mcve>> for a full 
> >     >     > description. 
> >     >     > --- 
> >     >     > 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 sqlalchemy+...@googlegroups.com <javascript:> 
> >     >     > <mailto:sqlalchemy+unsubscr...@googlegroups.com 
> <javascript:> 
> >     <javascript:> <javascript:>>. 
> >     >     > To post to this group, send email to 
> sqlal...@googlegroups.com 
> >     >     <javascript:> 
> >     >     > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> >     >     > Visit this group at 
> >     https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy> 
> >     >     <https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy>>. 
> >     >     > For more options, visit https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout> 
> >     >     <https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout>>. 
> >     > 
> >     > -- 
> >     > SQLAlchemy - 
> >     > The Python SQL Toolkit and Object Relational Mapper 
> >     > 
> >     > http://www.sqlalchemy.org/ 
> >     > 
> >     > To post example code, please provide an MCVE: Minimal, Complete, 
> and 
> >     > Verifiable Example. See http://stackoverflow.com/help/mcve 
> >     <http://stackoverflow.com/help/mcve> for a full 
> >     > description. 
> >     > --- 
> >     > 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 sqlalchemy+...@googlegroups.com <javascript:> 
> >     > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:> 
> <javascript:>>. 
> >     > To post to this group, send email to sqlal...@googlegroups.com 
> >     <javascript:> 
> >     > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> >     > Visit this group at https://groups.google.com/group/sqlalchemy 
> >     <https://groups.google.com/group/sqlalchemy>. 
> >     > For more options, visit https://groups.google.com/d/optout 
> >     <https://groups.google.com/d/optout>. 
> > 
> > -- 
> > SQLAlchemy - 
> > The Python SQL Toolkit and Object Relational Mapper 
> > 
> > http://www.sqlalchemy.org/ 
> > 
> > To post example code, please provide an MCVE: Minimal, Complete, and 
> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> > description. 
> > --- 
> > 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 sqlalchemy+...@googlegroups.com <javascript:> 
> > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:> 
> > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to