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
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension ())) with session_shardid(DBSession,table_hash): Base.metadata.create_all(DBSession.connection()) DBSession.flush() transaction.commit() Was analyzing why it is getting rolled back. Started with a 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, in rollback 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): assert not self.__branch_from import traceback tb = traceback.format_exc() if self._has_events or self.engine._has_events: self.dispatch.rollback(self) *if self._still_open_and_connection_is_valid: if self._echo: self.engine.logger.info("ROLLBACK") try:* self.engine.dialect.do_rollback(self.connection) except BaseException as e: self._handle_dbapi_exception(e, None, None, None, None) finally: if not self.__invalid and \ self.connection._reset_agent is self.__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> > > > > 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> > > > > 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 > > traceback > > url: > 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['session_info']=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["shard"]=shardid > > yield > > 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 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.