Python SqlAlchemy – AttributeError: mapper

основанный на моей модели:

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') 

Я хочу создать новый сеанс через:

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

Но я получаю:

 AttributeError: mapper 

Полная стек:

 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) 

Я понятия не имею, откуда эта ошибка, и я не могу ее отладить. Кто-нибудь может помочь мне в этой проблеме?

Спасибо и приветствую!

  • Класс не имеет указанной таблицы или имени табуляции и не наследует от существующего класса с табличным отображением
  • SQLAlchemy и UnicodeDecodeError
  • Использование OR в SQLAlchemy
  • SQLAlchemy INSERT IGNORE
  • Преобразование ORM SQLAlchemy в pandas DataFrame
  • Sqlite / SQLAlchemy: как применять внешние ключи?
  • sqlalchemy: индивидуальная связь с декларативным
  • группа по годам, месяцам, дням в sqlalchemy
  • One Solution collect form web for “Python SqlAlchemy – AttributeError: mapper”

    Посмотрев на трассировку, вы можете увидеть следующие строки:

      ... 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 ... 

    которые значительно сокращают вашу проблему. Отношение

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

    использует в качестве аргумента строку, оцениваемую Python, использование которой далее объясняется в разделе «Настройка отношений» :

    Отношения с другими классами выполняются обычным способом, с добавленной функцией, которую класс, указанный для relationship() может быть именем строки. «Реестр классов», связанный с Base , используется во время компиляции карты, чтобы разрешить имя в фактический объект класса, который, как ожидается, будет определен после использования конфигурации сопоставления

    Если вы не импортировали модуль models.user где-нибудь, прежде чем пытаться создать экземпляр объекта Session в первый раз, тогда разрешение имени не будет выполнено, потому что класс User еще не создан и не существует в реестре. Другими словами, для разрешения имени для работы все классы должны быть определены, что означает, что их тела должны быть выполнены.

    И если вы действительно импортировали модуль models.user , проверьте свои другие модели и определили связанные с ними классы моделей. Использование ваших моделей в первый раз запускает компиляцию / конфигурацию картографа, поэтому источником ошибки могут быть и другие модели .

    Python - лучший язык программирования в мире.