Как использовать on_conflict_do_nothing () с return () в Postgres + SQLAlchemy? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть таблица отношений «NoteTags», которая позволяет вам соединить «заметку» с «тегом» с простой схемой:

tag_id: integer, foreign key
note_id: integer, foreign key

Первичный ключ таблицы - tag_id, note_id.

Мой текущий оператор вставки выглядит так:

insert(table).values(elements).returning(*primary_key_columns)

В настоящее время, если вы попытаетесь вставить уже существующую комбинацию tag_id / note_id, она не будет вставлена.

Обычно , Я бы использовал on_conflict_do_nothing(), но это не сработает, потому что тогда "return" не возвращает значение для этой строки, и мне это нужно для этого.

Как мне получить «ничего не делать», когда есть конфликт, но все же иметь returning() делать свое дело?

Я видел решения для подобных проблем, которые предлагают использовать on_conflict_update() (и просто выполнить «избыточное» обновление , т.е. обновить поле до того же значения.) Однако все мои поля уже находятся в индексе, который имеет конфликт (т.е. первичный ключ), поэтому у меня, похоже, не осталось никаких полей для «обновления».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...