#postgresql #sqlalchemy #upsert #partial-index
#postgresql #sqlalchemy #upsert #частичный индекс
Вопрос:
У меня есть таблица с именем Person с тремя полями — ID, город и имя. Город может быть нулевым, поэтому у меня есть два частичных уникальных индекса — один для ID и city, где city не равен null, и один для ID, где city равен null.
Теперь я хочу иметь оператор upsert с использованием SQLAlchemy с этими частичными индексами, но я не могу разобраться в синтаксисе. В настоящее время у меня есть:
table = models.Person.__table__
insert_statement = insert(table, upsert_values)
update_dict = {c.name: c for c in insert_statement.excluded if c.name != "id"}
upsert_statement = insert_statement.on_conflict_do_update(
index_elements=[table.c['id'], table.c['city']],
set_=update_dict
)
но когда я пытаюсь выполнить, я получаю
ошибка sqlalchemy.exc.ProgrammingError: (psycopg2.ошибки.InvalidColumnReference) нет ограничения уникальности или исключения, соответствующего спецификации ON CONFLICT
Как это может работать? Есть ли другой способ, кроме запуска чистого SQL?