Как обрабатывать циклическую зависимость между двумя таблицами в SQLAlchemyPython

Программы на Python
Anonymous
Как обрабатывать циклическую зависимость между двумя таблицами в SQLAlchemy

Сообщение Anonymous »

У меня возникла проблема с разрешением циклической зависимости между двумя таблицами. Просмотрел всю информацию, которую нашел, но все равно не совсем работает.
Мои таблицы выглядят так

Код: Выделить всё

             run                                                calibration_metric
-------------------------------------------           ---------------------------------
run_pk         calibration_metric_pk                    calibration_metric          run_pk
1                     5                                      5                     1
Отношение калибрации_метрики к запуску составляет «многие к 1», а от пробега к калибрации_метрики – от 1 к 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")
У меня есть этот раздел «objective_metric_pk == CalibrationMetric.pk», в кавычках, потому что без них Python жаловался на циклический импорт
Я получаю эту ошибку

Код: Выделить всё

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.
Я не могу понять, почему он не находит калибратор_metric_pk
Обратите внимание, что меня не волнует получение списка объектов Calibration_Metric в Run, связанных первичным ключом Run. Меня интересует только соотношение 1-1 и получение объекта Calibration_Metric, на который указывает поле Calibration_metric_pk.
Но мне также хотелось бы иметь доступ к объекту Run из Calibration_Metric.run_pk. Я не думаю, что мне нужно указывать back_populates, поскольку меня интересует только один конец каждого из отношений

Подробнее здесь: https://stackoverflow.com/questions/786 ... sqlalchemy

Вернуться в «Python»