Я использую 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 * так что это может быть причиной проблемы.
Есть предложения по этому поводу?