2013-03-07 2 views
0

정보를 저장하기 위해 Sqlite 데이터베이스를 사용하는 mufti 스레드 응용 프로그램을 만듭니다.Sqlite 데이터베이스 다중 스레드 SELECT 및 UPDATE 작업 혼동

for i in cursor.execute('SELECT Beeid from SongLink WHERE Dlink=\'\''): 

다른 스레드는 데이터베이스를 액세스하고의 DLINK 값을 변경하려고 : 스레드

하나는 다음과 같이 특정 항목이 비어있는 행을 선택하는 선택 동작을 수행 열.

는 위의 코드는 항상 DLINK 곳 = \ '는 \' ' 복용이 사용 separate connections per thread 잘못된 행 선택

+0

호기심 때문에, 왜'' '' '에 대한 쿼리가''''할 것이고 왜'NULL's을 사용하지 않을까요? –

+0

모든 종류의 따옴표를 피할 수있는 오래된 습관이지만이를 지적 해 주셔서 감사합니다. – SteveIrwin

답변

1

으로 이어질 수있는 다른 스레드에 의해 또는 만든 업데이트 관리, 그리고 SQLite는 것 열을 줄 것이다 데이터 무결성을 유지합니다.

a) 변경 사항을 적용하고 b) 새 데이터를 보려는 연결에서 새 트랜잭션이 시작될 때까지 한 연결의 데이터베이스 변경 내용이 다른 스레드에 표시되지 않습니다.

연결의 check_same_thread 매개 변수를 True으로 설정하려고합니다.

+0

감사합니다. 그러나 나는 Dlink 값을 변경하는 두 번째 스레드의 변경 내용을 커밋한다고 말합니다. 첫 번째 스레드의 Select 명령은 Dlink가없는 값도 ""로 표시 할 수 있습니다. 제발 가르쳐주세요. – SteveIrwin

+1

@SteveIrwin : 새 트랜잭션을 시작할 때까지는 그렇지 않습니다. 그리고 데이터베이스는 쿼리와 일치하지 않는 값을 반환하지 않습니다. –

관련 문제