В этом источникеподробно описано, как использовать прокси-ассоциации для создания представлений и объектов со значениями объекта ORM.
Однако, когда я добавляю значение, которое соответствует существующему объекту в базе данных (и указанное значение является либо уникальным, либо первичным ключом), оно создает конфликтующий объект, поэтому я не могу зафиксировать.
Так что в моем случае это полезно только как представление, и мне нужно будет использовать запросы ORM для извлечения добавляемого объекта.
Это мой единственный вариант или я могу использовать слияние (я могу сделать это только в том случае, если это первичный ключ, а не уникальное ограничение), ИЛИ настроить конструктор таким образом, чтобы он использовал существующий объект в базе данных если он существует вместо создания нового объекта?
Например, из документов:
user.keywords.append('cheese inspector')
# Is translated by the association proxy into the operation:
user.kw.append(Keyword('cheese inspector'))
Но я бы хотел, чтобы меня перевели на что-то более похожее на: (конечно, запрос может завершиться ошибкой).
keyword = session.query(Keyword).filter(Keyword.keyword == 'cheese inspector').one()
user.kw.append(keyword)
ИЛИ в идеале
user.kw.append(Keyword('cheese inspector'))
session.merge() # retrieves identical object from the database, or keeps new one
session.commit() # success!
Я полагаю, что это даже не очень хорошая идея, но в определенных случаях она может быть :)