Несколько зависимых отношений в sqlalchemy - PullRequest
0 голосов
/ 03 октября 2019

Я новичок в SQLAlchemy, и у меня возникают проблемы с установкой более сложных отношений между таблицами. Прямо сейчас у меня есть следующие таблицы:

class sample(Base):
    __tablename__ = 'sample'
    id = Column(Integer,primary_key=True,info={'verbose_name':'ID','std_unit':None})
    ...
    sem_files = relationship("sem_file",cascade="save-update, merge, delete")
    primary_sem_file_id = Column(Integer,ForeignKey("sem_analysis.id",use_alter=True),index=True)
    primary_sem_file = relationship("sem_file",primaryjoin="sem_file.id==primary_sem_file_id",uselist=False)
    ...

class sem_analysis(Base):
    __tablename__ = 'sem_analysis'
    id = Column(Integer,primary_key=True,info={'verbose_name':'ID'})
    sem_file_id = Column(Integer,ForeignKey("sem_file.id"),index=True)
    sem_file_model = relationship("sem_file",primaryjoin="sem_analysis.sem_file_id==id",back_populates="analyses")
    ...

class sem_file(Base):
    __tablename__ = 'sem_file'
    id = Column(Integer,primary_key=True,info={'verbose_name':'ID'})
    sample_id = Column(Integer,ForeignKey(sample.id),index=True)

    default_analysis_id = Column(Integer,ForeignKey("sem_analysis.id",use_alter=True),index=True)

    default_analysis = relationship("sem_analysis",primaryjoin="sem_analysis.id==default_analysis_id")
    analyses = relationship("sem_analysis",primaryjoin="sem_analysis.sem_file_id==id")
    ...

Когда я пытаюсь создать новую модель образца, я получаю следующую ошибку:

InvalidRequestError: When initializing mapper mapped class sem_file->sem_file, expression 'sem_analysis.id==default_analysis_id' failed to locate a name ("name 'default_analysis_id' is not defined"). If this is a class name, consider adding this relationship() to the <class 'gresq.database.model.sem_file'> class after both dependent classes have been defined.

В основном,Я хочу:

  • sample.sem_files указывать на несколько моделей sem_file, как определено sem_file.sample_id
  • sample.primary_sem_file, чтобы указывать на конкретный sem_file, как определено sample.primary_sem_file_id
  • sem_file.analyses для нескольких моделей sem_analysis, как определено sem_analysis.sem_file_id
  • sem_file.default_analysis, чтобы указать на конкретный анализ sem_file.default_analysis_id_semo_seal_id_id__1_1_1_1 * 101mк определенному sem_file, как определено в sem_analysis.sem_file_id (заполнение задним числом sem_file.analyses)

Я искал онлайн помощь, но не могу заставить это работать. Я уверен, что неправильно понял структуру синтаксиса / отношений. Буду очень признателен за вашу помощь в этом!

...