Таблицы блокировки транзакций Django - PullRequest
4 голосов
/ 12 января 2011

Мне нужно обновить, добавить и удалить строки из таблицы auth.models.User, к сожалению ...

, когда я делаю это, таблица блокируется, и я не могу выполнить какие-либо запросы SELECT к таблице.


Я окружаю эти запросы @transaction.commit_manually, что может быть связано с блокировкой таблиц.

Транзакция выглядит следующим образом:

for row in csv_reader:

    update_sql = "UPDATE auth_user SET last_name = '%s' WHERE username = '%s'" %(row[2], row[0] )
    cursor.execute(update_sql)
    if not index % 100: print index:
        print index
        transaction.commit()

Также я использую Sql Server 2008 , я хотел бы знать, специфичен ли он для Sql Server или такие действия блокируют таблицу также в PostgreSQL и MySQL.идеи, ребята?:)

1 Ответ

2 голосов
/ 07 февраля 2011

Да, вы намеренно блокируете таблицы.Я бы предложил изучить изоляцию транзакций , потому что это одна из основных концепций баз данных.

Что касается вашей проблемы, вы могли бы сделать несколько вещей для операторов UPDATE и SELECT:

  • Вы могли бы установить уровень изоляции транзакции для чего-либониже для остальной части соединения с базой данных.
  • Возможно, вы могли бы сделать то же самое с другими механизмами тоже.
  • Вы могли бы попытаться перестроить свои запросы так, чтобы вы сначала прочиталибазовые данные, и после этого начинайте изменять данные.Это может позволить вам заблокировать таблицу, но позволить продолжить выполнение операции.
  • Вы могли бы снова рассмотреть, какие запросы важны для транзакционной обработки.
  • Вы также можете указать SQL Server с Запирающие подсказки .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...