Django事务锁定表

时间:2011-01-12 16:55:02

标签: python sql mysql sql-server django

不幸的是,我需要uphte,添加和删除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 个答案:

答案 0 :(得分:2)

是的,你故意锁定表格。我建议研究transaction isolation因为它是数据库的核心概念之一。

至于你的问题,你可以为UPDATE和SELECT语句做几件事:

  • 对于其余的数据库连接,您可以SET the transaction isolation level更低的值。
  • 您也可以对other mechanisms执行相同操作。
  • 您可以尝试重新排列查询,以便首先读取基础数据,然后开始修改数据。这可能允许您锁定表但允许操作继续。
  • 您可以再次考虑哪些查询对于交易处理非常重要。
  • 您还可以使用Locking Hints指导SQL Server。
相关问题