Yes session.is_active is True. I really sure, because i log this operation.
пятница, 16 февраля 2018 г., 13:50:51 UTC+3 пользователь Simon King написал: > > You haven't explained in what way it's not working with your latest > iteration. > > The last code you posted only called session.close() if > session.is_active was true. Are you sure you really are closing the > session? > > Simon > > On Fri, Feb 16, 2018 at 10:02 AM, <eugene...@gmail.com <javascript:>> > wrote: > > This option does not suit me. > > My app based on CherryPy 3.2.2. > > I add more logging, and all session closing by > > session.close() > > in finally section. > > I can't understand why this not work... > > > > четверг, 15 февраля 2018 г., 18:07:49 UTC+3 пользователь Антонио Антуан > > написал: > >> > >> You need just that: > >> from proj.core import Session > >> > >> @app.teardown_request > >> def clear_session(): > >> Session.remove() > >> > >> Session created with scoper_session, of course. We do not use > >> flask-sqlalchemy package, just flask and separated sqlalchemy. > >> > >> > >> чт, 15 февр. 2018 г., 16:28 Simon King <si...@simonking.org.uk>: > >>> > >>> When you say your first execute function doesn't work, what do you > >>> mean? Do you get an error? Do the results not show up in the database? > >>> > >>> I don't think there's any need for session.begin() > >>> > >>> > >>> > http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.begin > > >>> > >>> Simon > >>> > >>> On Thu, Feb 15, 2018 at 12:33 PM, <eugene...@gmail.com> wrote: > >>> > Hello, Simon! > >>> > Where did you read that I was using Flask? > >>> > I just write about it like example few posts ago. > >>> > Anyway. > >>> > I try another variant without decorator - just execute function > >>> > def execute(statement, **kwargs): > >>> > session = SESSION() > >>> > session.begin(subtransactions=True) > >>> > kwargs['tries'] = kwargs.get('tries', 0) > >>> > fetch = kwargs.get('fetch', 'all') > >>> > try: > >>> > result = session.execute(statement) > >>> > if fetch == 'all': > >>> > return result.fetchall() > >>> > elif fetch is False: > >>> > return True > >>> > elif fetch == 'count': > >>> > return result > >>> > return result.fetchone() > >>> > except ResourceClosedError: > >>> > session.rollback() > >>> > session.close() > >>> > time.sleep(.1) > >>> > print('try number {}'.format(kwargs['tries'])) > >>> > if kwargs['tries'] < 100: > >>> > kwargs['tries'] += 1 > >>> > return execute(statement, **kwargs) > >>> > return list() > >>> > except Exception as e: > >>> > session.rollback() > >>> > session.close() > >>> > print(e) > >>> > print(statement) > >>> > finally: > >>> > if session.is_active: > >>> > session.commit() > >>> > session.close() > >>> > but that not help too. Idk why that not work. > >>> > > >>> > I try another variant: > >>> > > >>> > def execute(statement, **kwargs): > >>> > fetch = kwargs.get('fetch', 'all') > >>> > with engine.connect() as session: > >>> > result = session.execute(statement) > >>> > if fetch == 'all': > >>> > return result.fetchall() > >>> > elif fetch is False: > >>> > return list() > >>> > elif fetch == 'count': > >>> > return result > >>> > return result.fetchone() > >>> > > >>> > But same error. That variant must always close connection after > return, > >>> > but > >>> > problem in something another. > >>> > > >>> > > >>> > > >>> > четверг, 15 февраля 2018 г., 13:21:51 UTC+3 пользователь Simon King > >>> > написал: > >>> >> > >>> >> Personally I wouldn't use decorators for this. I would make every > >>> >> function that needs to interact with the database take an explicit > >>> >> session parameter, and I would use the facilities of the web > framework > >>> >> to create the session at the beginning of the request and close it > at > >>> >> the end. I've never used Flask, but I see it has a "signals" > mechanism > >>> >> (http://flask.pocoo.org/docs/0.12/api/#signals) with > request_started > >>> >> and request_finished events. You could use the request_started > signal > >>> >> to create the session and attach it to the request object, and > clean > >>> >> it up in request_finished. > >>> >> > >>> >> Looking at the Flask docs, I think you could also write a simple > >>> >> extension. They have a SQLite example at > >>> >> http://flask.pocoo.org/docs/0.12/extensiondev/#the-extension-code, > >>> >> which you ought to be able to adapt for SQLAlchemy. The app context > is > >>> >> per-request, so it should be safe > >>> >> > >>> >> ( > http://flask.pocoo.org/docs/0.12/appcontext/#locality-of-the-context). > >>> >> > >>> >> Hope that helps, > >>> >> > >>> >> Simon > >>> >> > >>> >> On Thu, Feb 15, 2018 at 9:52 AM, <eugene...@gmail.com> wrote: > >>> >> > Hello, Simon! > >>> >> > So what better way? > >>> >> > Something like this? > >>> >> > SESSION = sessionmaker(bind=engine, autocommit=True) > >>> >> > > >>> >> > > >>> >> > > >>> >> > @decorator_with_args > >>> >> > def session_decorator(func, default=None): > >>> >> > def wrapper(*a, **kw): > >>> >> > session = SESSION() > >>> >> > session.begin(subtransactions=True) > >>> >> > if 'session' not in kw: > >>> >> > kw['session'] = session > >>> >> > try: > >>> >> > return func(*a, **kw) > >>> >> > except Exception as e: > >>> >> > session.rollback() > >>> >> > logging.error(e) > >>> >> > return default > >>> >> > finally: > >>> >> > if session.is_active: > >>> >> > session.commit() > >>> >> > session.close() > >>> >> > return wrapper > >>> >> > > >>> >> > I try create additional function > >>> >> > > >>> >> > @session_decorator() > >>> >> > def execute(statement, **kwargs): > >>> >> > session = kwargs['session'] > >>> >> > fetch = kwargs.get('fetch', 'all') > >>> >> > result = session.execute(statement) > >>> >> > if fetch == 'all': > >>> >> > return result.fetchall() > >>> >> > elif fetch is False: > >>> >> > return True > >>> >> > elif fetch == 'count': > >>> >> > return result > >>> >> > return result.fetchone() > >>> >> > > >>> >> > and use it in all execute statements, but that not help. > >>> >> > Still receive error > >>> >> > This result object does not return rows. It has been closed > >>> >> > automatically. > >>> >> > But how it closed if that another session? > >>> >> > Can you correct my code? > >>> >> > > >>> >> > > >>> >> > > >>> >> > > >>> >> > среда, 14 февраля 2018 г., 17:45:59 UTC+3 пользователь Simon King > >>> >> > написал: > >>> >> >> > >>> >> >> I think there are a couple of problems with this. > >>> >> >> > >>> >> >> 1. You are calling scoped_session and sessionmaker every time > the > >>> >> >> decorated function is called, which is unnecessary. sessionmaker > >>> >> >> returns a factory function for creating sessions, so you > typically > >>> >> >> only have one sessionmaker() call in your application. You could > >>> >> >> either make it a module-global, or do it during application > >>> >> >> configuration. > >>> >> >> > >>> >> >> 2. You are never calling session.close(). This means that the > >>> >> >> transaction started by a web request will stay open after the > >>> >> >> request > >>> >> >> ends. Since you are using scoped_session as well, the session is > >>> >> >> maintained as a thread-local object, so when the thread handles > >>> >> >> another web request, it will use the same session and the same > >>> >> >> transaction. Your long-running transactions are probably the > reason > >>> >> >> why you are getting blocked requests. > >>> >> >> > >>> >> >> You might like to read > >>> >> >> > >>> >> >> > >>> >> >> > >>> >> >> > http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#session-frequently-asked-questions. > > > >>> >> >> > >>> >> >> I was going to say that you need to add a "finally" section to > your > >>> >> >> session_decorator that calls session.close(), but if you ever > have > >>> >> >> one > >>> >> >> decorated function calling another decorated function, they are > >>> >> >> going > >>> >> >> to interfere with each other. If you are *absolutely certain* > that > >>> >> >> will never happen, adding the "finally" section will probably > >>> >> >> improve > >>> >> >> things, but I would recommend that you try to structure your app > a > >>> >> >> little differently, so that the session creation and teardown > >>> >> >> happen > >>> >> >> at the beginning and end of the web request. > >>> >> >> > >>> >> >> Hope that helps, > >>> >> >> > >>> >> >> Simon > >>> >> >> > >>> >> >> > >>> >> >> On Wed, Feb 14, 2018 at 2:14 PM, <eugene...@gmail.com> wrote: > >>> >> >> > Decorator like this > >>> >> >> > > >>> >> >> > engine = create_engine( > >>> >> >> > > >>> >> >> > > >>> >> >> > > >>> >> >> > > >>> >> >> > > 'mssql+pymssql://{LOGIN}:{PASSWORD}@{HOST}/{DATABASE}?charset={CHARSET}&timeout={TIMEOUT}'.format(**DATABASE), > > > >>> >> >> > isolation_level='READ COMMITTED' > >>> >> >> > ) > >>> >> >> > > >>> >> >> > > >>> >> >> > def decorator_with_args(decorator_to_enhance): > >>> >> >> > """ > >>> >> >> > https://habrahabr.ru/post/141501/ > >>> >> >> > """ > >>> >> >> > def decorator_maker(*args, **kwargs): > >>> >> >> > def decorator_wrapper(func): > >>> >> >> > return decorator_to_enhance(func, *args, **kwargs) > >>> >> >> > return decorator_wrapper > >>> >> >> > return decorator_maker > >>> >> >> > > >>> >> >> > > >>> >> >> > def scope_func(): > >>> >> >> > return scoped_session(sessionmaker(bind=engine, > >>> >> >> > autocommit=True))() > >>> >> >> > > >>> >> >> > > >>> >> >> > @decorator_with_args > >>> >> >> > def session_decorator(func, default=None, **kwargs): > >>> >> >> > def wrapper(*a, **kw): > >>> >> >> > session = scope_func() > >>> >> >> > if 'session' not in kw: > >>> >> >> > kw['session'] = session > >>> >> >> > try: > >>> >> >> > return func(*a, **kw) > >>> >> >> > except Exception as e: > >>> >> >> > session.rollback() > >>> >> >> > > >>> >> >> > print('#####FUNCTION NAME: > {}'.format(func.__name__)) > >>> >> >> > > >>> >> >> > print(e) > >>> >> >> > logging.error(e) > >>> >> >> > return default > >>> >> >> > return wrapper > >>> >> >> > > >>> >> >> > > >>> >> >> > > >>> >> >> > > >>> >> >> > среда, 14 февраля 2018 г., 17:06:54 UTC+3 пользователь Simon > King > >>> >> >> > написал: > >>> >> >> >> > >>> >> >> >> The pattern you should be aiming for is one in which a fresh > >>> >> >> >> transaction is started for every web request that touches the > >>> >> >> >> database, and that the transaction is closed at the end of > the > >>> >> >> >> request. How are you ensuring that at the moment? > >>> >> >> >> > >>> >> >> >> Simon > >>> >> >> >> > >>> >> >> >> On Wed, Feb 14, 2018 at 12:51 PM, <eugene...@gmail.com> > wrote: > >>> >> >> >> > If I run tests where all functions run one-by-one - all > tests > >>> >> >> >> > passed. > >>> >> >> >> > But when i run web app and functions can call almost in > >>> >> >> >> > parallel > >>> >> >> >> > then > >>> >> >> >> > i > >>> >> >> >> > have > >>> >> >> >> > a problem, then there are problems - transactions can block > >>> >> >> >> > each > >>> >> >> >> > other. > >>> >> >> >> > I tried to set the isolation level of SNAPSHOT and READ > >>> >> >> >> > COMMITTED, > >>> >> >> >> > but > >>> >> >> >> > it > >>> >> >> >> > did not help. > >>> >> >> >> > > >>> >> >> >> > среда, 14 февраля 2018 г., 14:58:37 UTC+3 пользователь > >>> >> >> >> > eugene...@gmail.com > >>> >> >> >> > написал: > >>> >> >> >> >> > >>> >> >> >> >> Hello, Mike! > >>> >> >> >> >> In my web app i have many selects like > >>> >> >> >> >> session.execute(select([table1]).where(condition)) > >>> >> >> >> >> and not so much updates, inserts and deletes like > >>> >> >> >> >> > >>> >> >> >> >> > session.execute(update(table1).where(condition).values(**values)) > >>> >> >> >> >> session.execute(insert(table1).values(**values)) > >>> >> >> >> >> session.execute(delete(table1).where(condition)) > >>> >> >> >> >> > >>> >> >> >> >> What better way to create session for web application? > >>> >> >> >> >> Without additional components like flask-sqlalchemy. > >>> >> >> >> >> > >>> >> >> >> >> суббота, 27 января 2018 г., 20:23:05 UTC+3 пользователь > Mike > >>> >> >> >> >> Bayer > >>> >> >> >> >> написал: > >>> >> >> >> >>> > >>> >> >> >> >>> On Sat, Jan 27, 2018 at 5:49 AM, Евгений Рымарев > >>> >> >> >> >>> <rymarev...@gmail.com> wrote: > >>> >> >> >> >>> > I receive this error: > >>> >> >> >> >>> > This result object does not return rows. It has been > >>> >> >> >> >>> > closed > >>> >> >> >> >>> > automatically. > >>> >> >> >> >>> > >>> >> >> >> >>> there's a lot of weird situations which can cause that > >>> >> >> >> >>> error, > >>> >> >> >> >>> usually > >>> >> >> >> >>> when using a connection that has had some failure > condition > >>> >> >> >> >>> occur > >>> >> >> >> >>> upon > >>> >> >> >> >>> it which renders the connection unusable until either a > >>> >> >> >> >>> transaction > >>> >> >> >> >>> is > >>> >> >> >> >>> rolled back or sometimes the connection needs to be > >>> >> >> >> >>> discarded. > >>> >> >> >> >>> We > >>> >> >> >> >>> can't diagnose it without a full example that reproduces > it > >>> >> >> >> >>> as > >>> >> >> >> >>> well > >>> >> >> >> >>> as > >>> >> >> >> >>> the complete stack trace. > >>> >> >> >> >>> > >>> >> >> >> >>> > >>> >> >> >> >>> > > >>> >> >> >> >>> > > >>> >> >> >> >>> > > >>> >> >> >> >>> > суббота, 27 января 2018 г., 1:09:53 UTC+3 пользователь > >>> >> >> >> >>> > Mike > >>> >> >> >> >>> > Bayer > >>> >> >> >> >>> > написал: > >>> >> >> >> >>> >> > >>> >> >> >> >>> >> On Fri, Jan 26, 2018 at 4:21 PM, Евгений Рымарев > >>> >> >> >> >>> >> <rymarev...@gmail.com> wrote: > >>> >> >> >> >>> >> > Hello, everyone! > >>> >> >> >> >>> >> > Engine: > >>> >> >> >> >>> >> > engine = create_engine( > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > 'mssql+pymssql://{LOGIN}:{PASSWORD}@{HOST}/{DATABASE}?charset={CHARSET}'.format(**DATABASE), > > > >>> >> >> >> >>> >> > isolation_level='READ COMMITTED' > >>> >> >> >> >>> >> > ) > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > My first decorator for session: > >>> >> >> >> >>> >> > @decorator_with_args > >>> >> >> >> >>> >> > def session_decorator(func, default=None): > >>> >> >> >> >>> >> > def wrapper(*a, **kw): > >>> >> >> >> >>> >> > s = Session(engine) > >>> >> >> >> >>> >> > kw['session'] = s > >>> >> >> >> >>> >> > try: > >>> >> >> >> >>> >> > return func(*a, **kw) > >>> >> >> >> >>> >> > except Exception as e: > >>> >> >> >> >>> >> > func(*a, **kw) > >>> >> >> >> >>> >> > s.rollback() > >>> >> >> >> >>> >> > s.close() > >>> >> >> >> >>> >> > logging.error(e) > >>> >> >> >> >>> >> > return default > >>> >> >> >> >>> >> > finally: > >>> >> >> >> >>> >> > s.commit() > >>> >> >> >> >>> >> > s.close() > >>> >> >> >> >>> >> > return wrapper > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > My second decorator for session: > >>> >> >> >> >>> >> > session = scoped_session(sessionmaker(bind=engine)) > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > @decorator_with_args > >>> >> >> >> >>> >> > def session_decorator(func, default=None): > >>> >> >> >> >>> >> > def wrapper(*a, **kw): > >>> >> >> >> >>> >> > kw['session'] = session > >>> >> >> >> >>> >> > try: > >>> >> >> >> >>> >> > return func(*a, **kw) > >>> >> >> >> >>> >> > except Exception as e: > >>> >> >> >> >>> >> > session.remove() > >>> >> >> >> >>> >> > logging.error(e) > >>> >> >> >> >>> >> > return default > >>> >> >> >> >>> >> > finally: > >>> >> >> >> >>> >> > session.remove() > >>> >> >> >> >>> >> > return wrapper > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > In both attempts, I came to the conclusion that > >>> >> >> >> >>> >> > sessions > >>> >> >> >> >>> >> > can > >>> >> >> >> >>> >> > block > >>> >> >> >> >>> >> > other > >>> >> >> >> >>> >> > sessions. > >>> >> >> >> >>> >> > How correctly to create a session once, so that it > can > >>> >> >> >> >>> >> > be > >>> >> >> >> >>> >> > used > >>> >> >> >> >>> >> > throughout > >>> >> >> >> >>> >> > the web application and no locks were created? > >>> >> >> >> >>> >> > >>> >> >> >> >>> >> The Session doesn't create locks, transactions and > your > >>> >> >> >> >>> >> database > >>> >> >> >> >>> >> does. > >>> >> >> >> >>> >> > >>> >> >> >> >>> >> What is the nature of these "blocks", are they > deadlocks > >>> >> >> >> >>> >> between > >>> >> >> >> >>> >> tables or rows? What operations are prevented from > >>> >> >> >> >>> >> proceeding? > >>> >> >> >> >>> >> Are > >>> >> >> >> >>> >> the locks timing out? SQL Server has graphical > consoles > >>> >> >> >> >>> >> that > >>> >> >> >> >>> >> can > >>> >> >> >> >>> >> show you this. > >>> >> >> >> >>> >> > >>> >> >> >> >>> >> What version of SQL Server is this? Do you have > >>> >> >> >> >>> >> ALLOW_SNAPSHOT_ISOLATION and READ_COMMITTED_SNAPSHOT > >>> >> >> >> >>> >> turned > >>> >> >> >> >>> >> on? > >>> >> >> >> >>> >> > >>> >> >> >> >>> >> > >>> >> >> >> >>> >> > > >>> >> >> >> >>> >> > -- > >>> >> >> >> >>> >> > 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. > >>> >> >> >> >>> >> > To post to this group, send email to > >>> >> >> >> >>> >> > sqlal...@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+...@googlegroups.com. > >>> >> >> >> >>> > To post to this group, send email to > >>> >> >> >> >>> > sqlal...@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+...@googlegroups.com. > >>> >> >> >> > To post to this group, send email to > >>> >> >> >> > sqlal...@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+...@googlegroups.com. > >>> >> >> > To post to this group, send email to sqlal...@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+...@googlegroups.com. > >>> >> > To post to this group, send email to sqlal...@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+...@googlegroups.com. > >>> > To post to this group, send email to sqlal...@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+...@googlegroups.com. > >>> To post to this group, send email to sqlal...@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+...@googlegroups.com <javascript:>. > > To post to this group, send email to 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.