python – 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中的表.

有什么想法吗? 🙂

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

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

>对于数据库连接的其余部分,您可以将SET the transaction isolation level降低到更低的值.
>你也可以用other mechanisms做同样的事情.
>您可以尝试重新排列查询,以便首先读取基础数据,然后开始修改数据.这可能允许您锁定表但允许操作继续.
>您可以再次考虑哪些查询在事务处理中很重要.
>您还可以使用Locking Hints指导SQL Server.

点赞