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.