SQLAlchemy "AttributeError: объект 'str' не имеет атрибута 'c'" - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть две таблицы с именами users и permissions, и я хотел создать связь между ними, используя таблицу с именем userPermissions.Вот как выглядит мой код:

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    first_name = Column(Text)
    last_name = Column(Text, nullable=True)

class Permission(Base):
    __tablename__ = 'permissions'

    id = Column(Integer, primary_key=True)
    title = Column(String(64))
    allow_anonymous = Column(Boolean)

class UserPermission(Base):
    __table__ = 'userPermissions'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    permission_id = Column(Integer, ForeignKey('permissions.id'))
    value = Column(Boolean)

Я знаю, что могу неправильно строить отношения, но просматривая документы и ища, я не смог найти, что это такое.Когда я пытаюсь создать таблицы, используя db.Base.metadata.create_all(db.engine), выдается следующая ошибка:

/usr/bin/python3.6 /path/project/out.py
Traceback (most recent call last):
  File "/path/project/out.py", line 1, in <module>
    from components.database import setup
  File "/path/project/components/database/__init__.py", line 41, in <module>
    class UserPermission(Base):
  File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/api.py", line 65, in __init__
    _as_declarative(cls, classname, cls.__dict__)
  File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 116, in _as_declarative
    _MapperConfig.setup_mapping(cls, classname, dict_)
  File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 144, in setup_mapping
    cfg_cls(cls_, classname, dict_)
  File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 172, in __init__
    self._setup_table()
  File "/home/user/.local/lib/python3.6/site-packages/sqlalchemy/ext/declarative/base.py", line 481, in _setup_table
    if not table.c.contains_column(c):
AttributeError: 'str' object has no attribute 'c'

В чем проблема?

Ответы [ 2 ]

0 голосов
/ 08 августа 2019
class UserPermission(Base):
    __table__ = 'userPermissions'

здесь должно быть:

class UserPermission(Base):
    __tablename__ = 'userPermissions'
0 голосов
/ 25 ноября 2018

В вашем классе UserPermission вы используете неправильный атрибут dunder:

__table__ = 'userPermissions'

Должно быть:

__tablename__ = 'userPermissions'

Sqlalchemy пытается обработать строку 'userPermissions' какTable объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...