Прокси ассоциации SQLAlchemy

В этом источникеподробно описано, как использовать прокси-ассоциации для создания представлений и объектов со значениями объекта 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!

Я полагаю, что это даже не очень хорошая идея, но в определенных случаях она может быть :)

7
задан Mack 28 July 2014 в 08:39
поделиться