@DoggoTheKing

Как сделать проверку на сущестование пары столбцов (ManyToMany) в асинхронном коде?

Есть код, который делает запросы к API и вносит изменения в базу. Изначально он был синхронным и работал без ошибок. Когда я переписал его для использования в воркерах, стал падать с ошибкой:
> "INSERT INTO main_user_groups (group_id, user_id)"
psycopg2.IntegrityError: duplicate key value violates unique constraint "main_user_groups_user_id_group_id_dce92137_uniq
DETAIL:  Key (user_id, group_id)=(1623, 2) already exists.


Вот кусок кода, на котором падает:
if row:
    user_id_rel = row[0]
    cur.execute(  # psycopg2.cursor 
         f"INSERT INTO main_user_groups (group_id, user_id) "
         f"VALUES ('{group_ID_rel}', '{user_id_rel}');"
    )
else:
    ...


Все остальные треды падают с ошибкой:
> "UPDATE main_group "
psycopg2.InternalError: current transaction is aborted, commands ignored until end of transaction block

Я пытался пофиксить это через try/except + cursor.rollback() и INSERT + ON CONFLICT UPDATE, оно не получилось.

Судя по всему, код падает из-за совпадения текущей пары с уже существующей в базе. Можно ли этот поправить без совершения запросов на проверку существования пары , т.к. они медленные?
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы