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:>>.
    >     > 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:>>.
    > 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+unsubscr...@googlegroups.com
<mailto:sqlalchemy+unsubscr...@googlegroups.com>.
To post to this group, send email to sqlalchemy@googlegroups.com
<mailto:sqlalchemy@googlegroups.com>.
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