Этот источник подробно описывает, как использовать прокси-серверы ассоциации для создания представлений и объектов со значениями объекта 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!
Полагаю, это может даже не быть хорошей идеей, но это может бытьв определенных случаях использования :)