2010-02-17 3 views

답변

3

격리 수준은 mysql 드라이버에 의해 변경되지 않으므로 서버의 기본 격리 수준에 따라 다릅니다.

1

현재 django는 격리 수준을 설정하지 않습니다. django가 READ COMMITTED보다 높은 격리 수준에서 제대로 작동하지 않기 때문에 이것은 버그입니다. 그러나 MySQL은 기본적으로 REPEATABLE READ를 사용하고 있습니다. 격리 수준 (#14026)을 설정하는 설정을 추가하고 READ COMMITTED를 기본값 (#13906)으로 설정하는 방법에 대한 설명이 있습니다. 또한 MySQL transactions and django에 대한 자세한 기사를 작성했습니다.

+1

감사합니다. 그러나 링크 된 블로그는 비공개로 보입니다. 이 기사를 열거 나 여기에 복사/붙여 넣기를 할 수 있습니까? – Evgeny

+2

일부 정보를 인용하거나 "Django가 READ COMMITTED보다 높은 격리 수준에서 제대로 작동하지 않습니다"에 대해 자세히 설명 할 수 있습니까? – Evgeny

+0

@Sebastian Noack 기사에 '권한 필요'가 표시됩니까? –

9

또한이 같은 장고 데이터베이스 옵션을 사용하여 클라이언트/세션 당이를 변경할 수 있습니다

DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", } 
+2

누군가가 이것을 실행했는지 확인할 수 있습니까? 반복 가능한 읽기 문제가 있습니다. http://stackoverflow.com/questions/2235318/how-do-i-deal-with-this-race-condition-in-django – danihp

+0

@danihp이 (가) 실행되지만 구문은 off입니다. . 나는'SET storage_engine = INNODB;를 사용하고있다. 세션 분리 격리 수준을 설정하십시오. '대신 – soulseekah

0

(미안 해요, 난 Danhip에 대해 말씀 드릴 수 없습니다) 이 솔루션은 나를 위해 wotked (MySQL의) 나는 데이터베이스 필드에 Peter의 코드를 추가했습니다.

DATABASES = { 
    'default': { 
     (...) 
     'OPTIONS': { 
      (...), 
      "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED" 
     }, 
    } 
}