Ok, I define my situation. At first, I'm appologizing for my accent :) I have two databases, postgresql and vertica. I have some amount of large tables, besides other tables.
Postgres stores only last two hours (or last week, depends on table) of large tables, vertica stores all other data. I implemented *SplittedDataQuery*, subclass of *Query*, which used with my *Session* like *query_cls*. The subclass overrides *__iter__(), all(), count(), first(), one()* methods. It has attribute *_base_query*, which refers on *self*, *_pg_query* and *_vertica_query*. Before invoking them, *SplittedDataQuery* checks necessity (by whereclause inside query and `splitting_time` - moment when the data splitted between databases) of getting data only from Pg, or only from vertica, or from both with data union. Data from vertica returns by *_vertica_query*, data from postgres - by *_pg_query* *_vertica_query *binds with* SessionVertica.* all other queries (*_pg_query and _base_query*) binds with *Session* Function, creates *SessionVertica*, has nothing unusual. Session for pg creates like this: def _create_session(self, conn_string, splitted_query_cls=True): engine = create_engine(conn_string) from core.splitted_data import SplittedDataQuery session = ScopedSession(sessionmaker(bind=engine, query_cls= SplittedDataQuery if splitted_query_cls else Query)) # query_cls choosing only for SplittedDataQuery._pg_query return session There is overrided *all():* def all(self): return self._get_result() Implementation of *_get_result() *looks like this*:* def _get_result(self): self._analyze_base_query() self._split_query() self._initialize_db_queries() result = self._vertica_query.all() if self._needs_to_get_from_pg: result.extend(self._pg_query.all()) *_db_queries* initialization inside *SplittedDataQuery* class: def __init_pg_query(self): original_session = _create_session(config['sqlalchemy'][ 'conn_string'], splitted_query_cls=False) self._pg_query = self._query.filter() \ .with_session(original_session) def __init_vertica_query(self): from hasoffers.core.model.meta import SessionVertica self._vertica_query = self._query.filter() \ .with_session(SessionVertica) If I don't create *_pg_query* using *splitted_query_cls=**False* (with std Query class)*, *then _pg_query invokation of methods (*all(), one() *and other) will always apply overrided methods (because it uses SplittedDataQuery). But, if I create* _pg_query *by defined way, it creates new session and, so, new connection to Postgres. As you see, I don't want nor the first, neither the second option :) вторник, 12 июля 2016 г., 13:35:48 UTC+3 пользователь Simon King написал: > Could you describe what you are trying to achieve? There's nothing > about Mike's suggestion that means you need to create a new session - > you can reuse any existing session. > > What does your CustomQueryCls do? Perhaps there's another way of doing > what you want? > > Simon > > On Tue, Jul 12, 2016 at 11:09 AM, Антонио Антуан <a.ch...@gmail.com > <javascript:>> wrote: > > But it means that I should create one more session with one more > connection > > to DB. This is not good for me :( > > > > понедельник, 11 июля 2016 г., 22:23:11 UTC+3 пользователь Антонио Антуан > > написал: > >> > >> Can I specify query_cls only for a one query? I try to change > >> query.session._query_cls and, of course, it doesn't work... > >> > >> I want to perform something like this: > >> > >> query = Session.query(MyModel)... > >> default_querycls_result = query.all() > >> custom_querycls_result = query.change_query_cls(CustomQueryCls).all() > > > > -- > > 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. > -- 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.