[Sqlalchemy-tickets] Issue #3481: AttributeError: 'NoneType' object has no attribute '_getter' in s
Brought to you by:
zzzeek
|
From: Hanno S. <iss...@bi...> - 2015-07-10 11:37:48
|
New issue 3481: AttributeError: 'NoneType' object has no attribute '_getter' in sqlalchemy.engine.result https://bitbucket.org/zzzeek/sqlalchemy/issues/3481/attributeerror-nonetype-object-has-no Hanno Schlichting: Got a Sentry report from a live site today, using SQLAlchemy 1.0.6, PyMySQL 0.6.3 against a Amazon RDS MySQL 5.6 instance. This happened just once, in a code path that is frequently executed, so it must be some kind of weird state it got in, though I don't know what state that is. Looking through the issue tracker, this might be related to a new 1.0 feature via issue #3175. Full traceback: ``` #!python Stacktrace (most recent call last): <removed app code specific stack frames> File "sqlalchemy/orm/query.py", line 2445, in first ret = list(self[0:1]) File "sqlalchemy/orm/query.py", line 2281, in __getitem__ return list(res) File "sqlalchemy/orm/loading.py", line 84, in instances util.raise_from_cause(err) File "sqlalchemy/util/compat.py", line 199, in raise_from_cause reraise(type(exception), exception, tb=exc_tb) File "sqlalchemy/orm/loading.py", line 51, in instances for query_entity in query._entities File "sqlalchemy/orm/query.py", line 3312, in row_processor polymorphic_discriminator=self._polymorphic_discriminator File "sqlalchemy/orm/loading.py", line 313, in _instance_processor getter = result._getter(col) File "sqlalchemy/engine/result.py", line 495, in _getter return self._metadata._getter(key) AttributeError: 'NoneType' object has no attribute ``` The query going into this is a simple: ``` #!python session.query(SomeModel).filter(SomeModel.pk_column == 'somevalue') .first() ``` In the last stackframe, the locals are: ``` #!python key = Column('some_column', INTEGER(), table=<some_table>) self = <sqlalchemy.engine.result.ResultProxy object at 0x4aa7e50> ``` It looks to me like `ResultProxy._metadata` ends up being `None`, even after `_init_metadata` is called. I see a bunch of `if self._metadata is None` cases in the other functions, so maybe this just needs one of those protections as well. |