Мои таблицы выглядят так
Код: Выделить всё
run calibration_metric
------------------------------------------- ---------------------------------
run_pk calibration_metric_pk calibration_metric run_pk
1 5 5 1
У меня есть следующие определения (лишние поля удалены)
Код: Выделить всё
lass Run(ModelBase):
__tablename__ = 'run'
pk = mapped_column(Integer, primary_key=True)
calibration_metric_pk = mapped_column(ForeignKey("calibration_metric.pk", name="fk_run_calibration_metric"))
metric = relationship("CalibrationMetric",
primaryjoin="calibration_metric_pk == CalibrationMetric.pk",
post_update=True)
lass CalibrationMetric(ModelBase):
__tablename__ = 'calibration_metric'
pk = mapped_column(Integer, primary_key=True)
run_pk = mapped_column(ForeignKey("run.pk", name="fk_calibration_metric_run"))
run = relationship("Run")
Я получаю эту ошибку
Код: Выделить всё
sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper[Run(run)], expression 'calibration_metric_pk == CalibrationMetric.pk' failed to locate a name ("name 'calibration_metric_pk' is not defined"). If this is a class name, consider adding this relationship() to the class after both dependent classes have been defined.
Обратите внимание, что меня не волнует получение списка объектов Calibration_Metric в Run, связанных первичным ключом Run. Меня интересует только соотношение 1-1 и получение объекта Calibration_Metric, на который указывает поле Calibration_metric_pk.
Но мне также хотелось бы иметь доступ к объекту Run из Calibration_Metric.run_pk. Я не думаю, что мне нужно указывать back_populates, поскольку меня интересует только один конец каждого из отношений
Подробнее здесь: https://stackoverflow.com/questions/786 ... sqlalchemy