[Sqlalchemy-tickets] Issue #4298: regression in strategy pathing (zzzeek/sqlalchemy)
Brought to you by:
zzzeek
From: Michael B. <iss...@bi...> - 2018-07-08 23:09:10
|
New issue 4298: regression in strategy pathing https://bitbucket.org/zzzeek/sqlalchemy/issues/4298/regression-in-strategy-pathing Michael Bayer: due to #4287 ``` #!python from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declared_attr Base = declarative_base() class A(Base): __tablename__ = 'a' id = Column(Integer, primary_key=True) data = Column(String) bs = relationship("B") class B(Base): __tablename__ = 'b' id = Column(Integer, primary_key=True) aid = Column(ForeignKey('a.id')) cs = relationship("C") class C(Base): __tablename__ = 'c' id = Column(Integer, primary_key=True) bid = Column(ForeignKey('b.id')) e = create_engine("sqlite://", echo=True) Base.metadata.create_all(e) s = Session(e) s.add(A(bs=[B(cs=[C()])])) s.commit() s.close() a1 = s.query(A).options(Load(A).lazyload("*")).first() a1.bs[0].cs ``` ``` #!python Traceback (most recent call last): File "test.py", line 40, in <module> a1.bs[0].cs File "/home/classic/dev/sqlalchemy/lib/sqlalchemy/orm/attributes.py", line 242, in __get__ return self.impl.get(instance_state(instance), dict_) File "/home/classic/dev/sqlalchemy/lib/sqlalchemy/orm/attributes.py", line 599, in get value = self.callable_(state, passive) File "/home/classic/dev/sqlalchemy/lib/sqlalchemy/orm/strategies.py", line 631, in _load_for_state session, state, primary_key_identity, passive) File "<string>", line 1, in <lambda> File "/home/classic/dev/sqlalchemy/lib/sqlalchemy/orm/strategies.py", line 713, in _emit_lazyload state.load_options, effective_path File "/home/classic/dev/sqlalchemy/lib/sqlalchemy/ext/baked.py", line 185, in _add_lazyload_options cache_key = opt._generate_cache_key(cache_path) File "/home/classic/dev/sqlalchemy/lib/sqlalchemy/orm/strategy_options.py", line 92, in _generate_cache_key chopped = self._chop_path(loader_path, path) File "/home/classic/dev/sqlalchemy/lib/sqlalchemy/orm/strategy_options.py", line 389, in _chop_path elif c_token.is_mapper and p_token.is_mapper and \ AttributeError: 'str' object has no attribute 'is_mapper' ``` |