[Sqlalchemy-tickets] Issue #4175: selectinload raises an exception when used with sharded sessions
Brought to you by:
zzzeek
From: Rishi S. <iss...@bi...> - 2018-01-26 21:52:07
|
New issue 4175: selectinload raises an exception when used with sharded sessions https://bitbucket.org/zzzeek/sqlalchemy/issues/4175/selectinload-raises-an-exception-when-used Rishi Sharma: ``` #!python from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.horizontal_shard import ShardedSession Base = declarative_base() class Book(Base): __tablename__ = 'book' id = Column(Integer, primary_key=True) pages = relationship('Page') class Page(Base): __tablename__ = 'page' id = Column(Integer, primary_key=True) book_id = Column(ForeignKey('book.id')) def test_query_with_selectinload(session): book = Book() book.pages.append(Page()) session.add(book) session.commit() session.query(Book).options(selectinload('pages')).all() if __name__ == "__main__": engine = create_engine("mysql://root:@127.0.0.1:3306/test", echo=True) Base.metadata.create_all(engine) # vanilla_session = Session(engine) # test_query_with_selectinload(vanilla_session) sharded_session = scoped_session( sessionmaker( class_=ShardedSession, ) ) sharded_session.configure( shards=dict(test=engine), shard_chooser=lambda *args: 'test', id_chooser=lambda *args: None, query_chooser=lambda *args: ['test'] ) test_query_with_selectinload(sharded_session) ``` produces the following stack trace: ``` #!text Traceback (most recent call last): File "selectinload_horizontal_shard_query_test_case.py", line 50, in <module> test_query_with_selectinload(sharded_session) File "selectinload_horizontal_shard_query_test_case.py", line 28, in test_query_with_selectinload session.query(Book).options(selectinload('pages')).all() File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2726, in all return list(self) File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2878, in __iter__ return self._execute_and_instances(context) File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/ext/horizontal_shard.py", line 59, in _execute_and_instances partial.extend(iter_for_shard(shard_id)) File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 97, in instances util.raise_from_cause(err) File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 85, in instances post_load.invoke(context, path) File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 759, in invoke context, path, states, self.load_keys, *arg, **kw) File "<string>", line 1, in <lambda> File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/orm/strategies.py", line 1966, in _load_for_path lambda x: x[0] File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/ext/baked.py", line 341, in __iter__ return q._execute_and_instances(context) File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/ext/horizontal_shard.py", line 59, in _execute_and_instances partial.extend(iter_for_shard(shard_id)) File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/ext/horizontal_shard.py", line 48, in iter_for_shard mapper=self._mapper_zero(), File "/Users/rsharma/src/evolve/env/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 328, in _mapper_zero return self._entities[0].mapper AttributeError: '_BundleEntity' object has no attribute 'mapper' ``` |