2011-01-12 3 views
4

мне нужно upadte, добавлять и удалять строки из таблицы auth.models.User, к сожалению ...Джанго операции запирающие таблицы

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


Я вокруг этих запросов от @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 слишком.


Любые идеи ребята? :)

ответ

2

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

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

  • Вы могли SET the transaction isolation level к чему-то ниже для остальной части подключения к базе данных.
  • Возможно, вы тоже можете сделать то же самое с other mechanisms.
  • Вы можете попытаться изменить свои запросы так, чтобы вы сначала прочитали базовые данные и после этого начали изменять данные. Это может позволить вам заблокировать таблицу, но разрешить операцию.
  • Вы можете снова рассмотреть, какие вопросы важны для транзакций.
  • Вы также можете руководствоваться SQL Server с помощью Locking Hints.
Смежные вопросы