Не в состоянии ссылаться на внешний ключ ссылаться в sqlalchemy - PullRequest
0 голосов
/ 25 апреля 2019

У меня две настольные модели, одна родительская, а другая дочерняя

Это моя родительская модель

class users_table(Base):
    __tablename__ = 'users_table'
    userid = Column(String(50), unique= True, primary_key= True, nullable= False)
    username = Column(String(500), unique= True, nullable= False)
    password = Column(String(500), nullable= False)
    email = Column(String(500), nullable= False, unique= True)
    role = Column(String(10), default= 'user', nullable= False)
    created_on = Column(DateTime, nullable= False, default= datetime.datetime.utcnow)
    updated_on = Column(DateTime, nullable= False, default= datetime.datetime.utcnow)
    children = relationship("user_status_table")

Это моя детская модель

class user_status_table(Base):
    __tablename__ = 'user_status_table'
    id = Column(Integer, primary_key= True, nullable= False, unique= True, autoincrement=True)
    userid = Column(String(50), ForeignKey('users_table.userid'), nullable= False, unique= True)
    status = Column(String(50), default= 'active', nullable= False)
    updated_on = Column(DateTime, nullable= False, default= datetime.datetime.utcnow)

При запуске моего сервера выдает следующую ошибку:

"When initializing mapper Mapper|users_table|users_table, expression 'user_status_table' failed to locate a name (\"name 'user_status_table' is not defined\"). 

Если это имя класса, рассмотрите возможность добавления этого отношения () к классу после того, как оба зависимых класса были определены. "

1 Ответ

0 голосов
/ 25 апреля 2019

Как я вижу, вы пытаетесь установить однозначное отношение между users_table и user_status_table, потому что вы хотите, чтобы user_status_table.userid был уникальным, для достижения этого используйте uselist flag

Нижепростой пример:

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    child = relationship("Child", uselist=False, back_populates="parent")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))
    parent = relationship("Parent", back_populates="child")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...