python orm sqlalchemy attributeerror falcon

Python SqlAlchemy-AttributeError: mapper



orm falcon (1)

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 tengo:

AttributeError: mapper

La pila completa:

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 "<string>", 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 idea de dónde viene este error y realmente no puedo depurarlo ... ¿alguien podría ayudarme con este problema?

Gracias y saludos!


Mirando el traceback 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 ...

que reduce el 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 con más detalle en "Configuración de relaciones" :

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

Si no ha importado el módulo models.user cualquier lugar antes de intentar crear una instancia de un objeto Session por primera vez, la resolución del nombre falla porque el User la clase aún no se ha creado y no existe en el registro. En otras palabras, para que el nombre se resuelva, todas las clases deben haberse definido, lo que significa que sus cuerpos deben haberse ejecutado.

Y si realmente ha importado el módulo models.user , verifique sus otros modelos y que sus clases de modelo relacionadas hayan sido definidas. El uso de sus modelos por primera vez activa la compilación / configuración del mapeador, por lo que la fuente del error podría ser también otros modelos .