Запрос COMMIT TRANSACTION не имеет соответствующей BEGIN TRANSACTION с использованием django ORM - PullRequest
0 голосов
/ 10 февраля 2020

Я использую django 1.11 с django -ms sql 1.8 и python -tds 1.8.2, и я столкнулся с проблемой.

Есть 2 таблицы (пусть это быть таблицей A и таблицей B ) с одним и тем же столбцом assignee_id Мне нужно обновить.

Рабочий код A.model.objects.filter(assignee=assignee).update(assignee=new_assignee) для любого числа записи работают хорошо, однако выполнение одного и того же кода для модели B для большого количества записей завершается неудачно с сообщением «У запроса COMMIT TRANSACTION нет соответствующей BEGIN TRANSACTION» (я все еще могу обновить несколько записей).

Выполнение этого запроса atomi c удалило сообщение об ошибке, но теперь таблица B не обновляется.

Добавление select_for_update() тоже не помогает.

B.model.objects.select_for_update().filter(assignee=assignee).update(assignee=new_assignee)

Выполнение raw SQL привел к тем же результатам.

Запуск этого кода приводит к ошибке:

cursor = connection.cursor()
cursor.execute('UPDATE B SET assignee_id = {new_assignee} WHERE assignee_id ={assignee}'.format(assignee=assignee_id, new_assignee=new_assignee_id)
connection.commit()

Запуск этого не вызывает исключение и не обновляет таблицу:

with transaction.atomic():
    cursor = connection.cursor()
    cursor.execute('UPDATE B SET assignee_id = {new_assignee} WHERE assignee_id ={assignee}'.format(assignee=assignee_id, new_assignee=new_assignee_id)

Примечание: когда приложение запускает таблицу, B изменяется гораздо чаще, чем таблица A * 103. 3 * так что это может быть причиной проблемы.

Есть предложения по этому поводу?

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