cur.close()

집 서버는 대략 1일 1회 정도 재부팅한다. 처음에는 오전 9시 15분에 아내와 딸의 휴대전화가 연결되어 있지 않으면 재부팅 과정이 실행되도록 했다. 방학이 되니 적용할 수 없었다. 그래서 방학 때도 적용할 수 있는 코드를 새로 작성했다. 이 과정에서 재부팅 직전에 날짜와 시간을 db 파일에 저장해 둔다. 실행은 잘 되는데 로그를 보면 다음과 같이 cursor가 제대로 닫히지 않는다고 한다.

cur.close()
sqlite3.ProgrammingError: Cannot operate on a closed database.

여러 방법을 시도한 끝에 with를 이용해서 connection을 생성하는 방법을 적용했더니 더 이상 해당 메세지가 로그에 찍히지 않는다.

with sqlite3.connect(~~~, isolation_level=None) as con:
    cur = con.cursor()
    cur.execute(~~~)
    cur.close()