Django 事务锁定表
Posted
技术标签:
【中文标题】Django 事务锁定表【英文标题】:Django transactions locking tables 【发布时间】:2011-06-07 23:26:15 【问题描述】:不幸的是,我需要更新、添加和删除 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】:是的,您是故意锁定表格的。我建议学习transaction isolation,因为它是数据库的核心概念之一。
至于你的问题,你可以对 UPDATE 和 SELECT 语句做几件事:
您可以 SET the transaction isolation level 为数据库连接的其余部分设置更低的值。 您也可以对 other mechanisms 做同样的事情。 您可以尝试重新排列查询,以便首先读取基础数据,然后开始修改数据。这可能允许您锁定表,但允许操作继续进行。 您可以再次考虑哪些查询对于事务处理很重要。 您还可以使用Locking Hints 引导SQL Server。【讨论】:
以上是关于Django 事务锁定表的主要内容,如果未能解决你的问题,请参考以下文章