SQLAlchemy - разница между сопоставленным orm.relation с backref или двумя orm.relation с обеих сторон - PullRequest
0 голосов
/ 24 января 2011

В некоторых проектах я реализую запрошенное пользователем отображение (во время выполнения) двух таблиц, которые связаны отношением 1-к-n (одна таблица имеет поле ForeignKey).

Из того, что я получаю издокументация, обычным способом является добавление orm.relation к сопоставленным свойствам с mapped_collection в качестве collection_class для таблицы не-посторонних ключей с обратным указателем, так что в конце оба объекта таблицы orm сопоставляются друг с другом в атрибуте (одинимеет коллекцию через collection_class для orm.relation, используемого для него, другой имеет атрибут, помещенный в него с помощью backref).

Я нахожусь в ситуации, когда я иногда просто хочу, чтобы ForeignKey-сторонаиметь сопоставленный атрибут с другой таблицей (той, которая создается обратным ссылком), в зависимости от того, что решит пользователь (он может просто захотеть сопоставить эту сторону).

Теперь мне интересно,Я могу просто использовать отношение orm.relation для таблицы ForeignKey, так что я, вероятно, в итоге получу отношение orm.relation длятаблица foreignkey, как и прежде, с mapped_collection, но no backref и другой orm.relation в таблице Foreignkey, заменяющей этот автоматический backref (создавая две orm.relation в обеих таблицах, отображающих друг друга с обеих сторон).

Это доставит мне неприятности?Эквивалентен ли результат (только одной orm.relation в таблице non-foreignkey с обратным ссылочным значением)?Есть ли другой способ, как я мог бы отобразить только на стороне ForeignKey без необходимости отображать словарь на таблицу не-ForeignKey, а также с этой обратной ссылкой?

1 Ответ

1 голос
/ 08 апреля 2011

Я уже нашел ответ сам:

Если вы используете orm.relation с каждой стороны и без обратных ссылок, вы должны использовать back_poplates или если вы возитесь с одной стороны, он не будет должным образом обновлен в отображении на другой стороне.

Следовательно, возможно orm.relation с каждой стороны вместо автоматического обратного реферирования, но вы должны соответственно использовать back_poplates.

...