Squeak.ru - шаблоны программирования

Создает ли атомарная транзакция в django блокировку автоматически

У меня есть блок кода внутри transaction.atomic() в представлении. Мой вопрос заключается в том, создает ли django встроенную блокировку таблиц за кулисами.

with transaction.atomic():
    #code block that does database operations
    update_user() #this updates user table
    create_customer_products() #this updates user id to customer products table

Причина в том, что я получаю сообщение об ошибке «Превышено время ожидания блокировки; попробуйте перезапустить транзакцию» при запуске блока кода.

Установка django mysql на centos


  • Пожалуйста, опишите вашу среду и добавьте соответствующий код. 05.10.2017
  • Это ошибка, возвращенная из MySQL. stackoverflow.com/questions/5836623/ 05.10.2017
  • да, это ошибка, возвращаемая mysql. И это заставляет меня задаться вопросом, есть ли блокировка, установленная django, когда используется transaction.atomic(). Потому что я сам нигде не запираю стол. 05.10.2017
  • Чтобы изменить или вставить запись в таблицу innodb, транзакция должна получить монопольную блокировку в mysql. Если та же самая запись (или пробел) уже заблокирована другой транзакцией, то MySQL ожидает снятия блокировки или происходит указанный выше тайм-аут. Основываясь на приведенном выше коде, мы никак не можем сказать, что пошло не так (если что-то произошло). Вы можете проверить монитор innodb, чтобы получить больше информации, но без взаимоблокировки его использование также будет ограничено. 05.10.2017
  • @Shadow Я получил ответ, что хотел. Таким образом, атомарная транзакция Django создает блокировки за кулисами. Если вы можете опубликовать как ответ, а не как комментарий, я могу принять то же самое. 05.10.2017

Ответы:


1

Чтобы изменить или вставить запись в таблицу innodb, транзакция должна получить эксклюзивная блокировка в MySQL:

UPDATE... WHERE... устанавливает эксклюзивную блокировку следующего ключа для каждой записи, с которой сталкивается поиск. Однако для операторов, которые блокируют строки с помощью уникального индекса для поиска уникальной строки, требуется только блокировка записи индекса.

...

INSERT устанавливает монопольную блокировку вставленной строки. Эта блокировка является блокировкой записи индекса, а не блокировкой следующего ключа (то есть блокировка промежутка отсутствует) и не препятствует вставке других сеансов в промежутки перед вставленной строкой.

Если та же самая запись (или пробел) уже заблокирована другой транзакцией, то MySQL ожидает снятия блокировки или происходит указанный выше тайм-аут.

Основываясь на приведенном выше коде, мы никак не можем сказать, что пошло не так (если что-то произошло). Вы можете проверить монитор состояния innodb, чтобы получить больше информации, но без взаимоблокировки ее использование также будет ограничено.

Такое поведение свойственно MySQL, язык программирования приложения и библиотеки не могут на это повлиять.

05.10.2017
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...