Python SqlAlchemy – AttributeError: mapper

basado en mi modelo:

from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship Base = declarative_base() class Session(Base): __tablename__ = 'sessions' id = Column(Integer, primary_key=True) token = Column(String(200)) user_id = Column(Integer, ForeignKey('app_users.id')) user = relationship('model.user.User', back_populates='sessions') 

Quiero instanciar una nueva sesión a través de:

 session = Session(token='test-token-123') 

Pero me sale:

 AttributeError: mapper 

El stacktrace completo:

 Traceback (most recent call last): File "/home/ubuntu/.local/lib/python3.5/site-packages/falcon/api.py", line 227, in __call__ responder(req, resp, **params) File "./app_user/register.py", line 13, in on_post session = Session(token='test-token-123') File "", line 2, in __init__ File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/instrumentation.py", line 347, in _new_state_if_none state = self._state_constructor(instance, self) File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 764, in __get__ obj.__dict__[self.__name__] = result = self.fget(obj) File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/instrumentation.py", line 177, in _state_constructor self.dispatch.first_init(self, self.class_) File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/event/attr.py", line 256, in __call__ fn(*args, **kw) File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/mapper.py", line 2976, in _event_on_first_init configure_mappers() File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/mapper.py", line 2872, in configure_mappers mapper._post_configure_properties() File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/mapper.py", line 1765, in _post_configure_properties prop.init() File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/interfaces.py", line 184, in init self.do_init() File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/relationships.py", line 1653, in do_init self._process_dependent_arguments() File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/relationships.py", line 1710, in _process_dependent_arguments self.target = self.mapper.mapped_table File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 850, in __getattr__ return self._fallback_getattr(key) File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 828, in _fallback_getattr raise AttributeError(key) 

No tengo ni idea de dónde viene este error y no puedo realmente depurarlo. ¿Alguien podría ayudarme con este problema?

Gracias y un saludo!

Mirando la traza puedes ver estas líneas:

  ... File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/relationships.py", line 1653, in do_init self._process_dependent_arguments() File "/home/ubuntu/.local/lib/python3.5/site-packages/sqlalchemy/orm/relationships.py", line 1710, in _process_dependent_arguments self.target = self.mapper.mapped_table ... 

lo que reduce su problema un poco. La relación

  user = relationship('model.user.User', back_populates='sessions') 

utiliza una cadena evaluable de Python como argumento , cuyo uso se explica más detalladamente en “Configuración de relaciones” :

Las relaciones con otras clases se realizan de la manera habitual, con la característica agregada de que la clase especificada a relationship() puede ser un nombre de cadena. El “registro de clase” asociado con Base se usa en el tiempo de comstackción del asignador para resolver el nombre en el objeto de clase real, que se espera que se haya definido una vez que se use la configuración del asignador

Si no ha importado el módulo models.user ningún lugar antes de intentar crear una instancia de un objeto Session por primera vez, la resolución del nombre falla porque la clase User no se ha creado todavía y no existe en el registro. En otras palabras, para que la resolución de nombres funcione, todas las clases deben haber sido definidas, lo que significa que sus cuerpos deben haber sido ejecutados.

Y si realmente ha importado el módulo models.user , verifique sus otros modelos y que se hayan definido sus clases de modelos relacionadas. El uso de los modelos por primera vez activa la comstackción / configuración del asignador, por lo que la fuente del error también podrían ser otros modelos .