반응형
파이썬을 DB에 연결해주고 데이터를 추가하고 변경하려고 다른 파일창을 여러장 켜서 연결하여 작업중이었는데 무엇때문인지 같은 에러가 계속 발생했다. 에러는 바로 다음의 에러이다.
OperationalError sqlite3.operationalerror: database is locked
데이터베이스가 잠겨있다니 이상했다.... 그래서 구글링 한 결과 장고문서에서 SQLite는 경량 데이터베이스이므로 높은 수준의 동시성을 지원할 수 없다고 한다.
"데이터베이스가 잠겼음" 오류
SQLite는 경량 데이터베이스가 되어 높은 수준의 동시성을 지원할 수 없습니다. OperationalError: database is locked 오류는 응용 프로그램이 기본 구성에서 처리할 수 있는 sqlite보다 더 많은 동시성을 경험하고 있음을 나타냅니다. 이 오류는 하나의 스레드 또는 프로세스가 데이터베이스 연결에 독점적인 잠금을 가지고 있으며 잠금이 해제되기를 기다리는 다른 스레드가 타임 아웃되어 있음을 의미합니다.
파이썬의 SQLite 래퍼는 두 번째 스레드가 시간을 초과하기 전에 잠금에서 대기할 수 있는 시간을 결정하는 기본 시간 초과 값이 있으며 OperationalError : database is locked 오류가 발생합니다.
이 오류를 얻으면 다음과 같이 해결할 수 있습니다.
- 다른 데이터베이스 백엔드로 전환 합니다. 어떤 시점에서 SQLite는 실제 응용되는 프로그램에 비해 너무 "라이트"하며, 이러한 동시성 오류는 당신이 그 지점에 도달했음을 나타낸다.
- 동시성을 줄이고 데이터베이스 트랜잭션이 수명이 짧도록 코드를 다시 작성합니다.
- 타임아웃 데이터베이스 옵션을 설정하여 기본 타임아웃 값을 늘립니다.
그래서 일단 실행창을 모두 지우고 다시 실행시켰더니 정상작동되었다. 한 DB파일에 연결된 문서가 여러개라면 한개 내지 두개의 파일만 열어놓고 작업을 해야 할 것 같다.
그리고 시간이 초과되면 한번씩 프로그램을 껐다 키면서 저장시켜주자.
반응형
'Database > sqlite3' 카테고리의 다른 글
[Python sqlite3] SQLite - 데이터 읽기·변경·삭제 - SELECT, UPDATE, DELETE, WHERE (0) | 2021.04.05 |
---|---|
[Python sqlite3] SQLite 설치 , DB 연결 , 데이터 삽입하기 / connect(), cursor(), excute() (0) | 2021.04.05 |
댓글