Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 SQLite3 데이터베이스에 날짜를 저장하고 조회하는 방법

Python의 sqlite3 모듈을 사용하면 SQLite3 데이터베이스에 날짜를 아주 간단하게 저장하고 조회할 수 있습니다. 핵심은 데이터베이스에 연결할 때 detect_types=sqlite3.PARSE_DECLTYPES 옵션을 지정하는 것입니다. 이 옵션을 활성화하면 테이블 생성 시 선언한 컬럼 타입(예: DATE)을 기준으로 Python이 날짜 값을 자동 변환해 주기 때문에, 삽입할 때는 datetime 객체를 그대로 전달하고 조회할 때도 이미 파싱된 객체를 받을 수 있습니다.

날짜 저장하기

다음 예제는 메모리 기반 SQLite 데이터베이스를 만들고, DATE 타입 컬럼이 있는 테이블에 datetime.date 객체를 직접 삽입합니다. 날짜를 문자열로 변환하는 별도의 작업이 필요하지 않습니다.

import sqlite3
import datetime

conn = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
conn.execute('''CREATE TABLE TEST (ID TEXT PRIMARY KEY NOT NULL, DATE DATE)''')
conn.commit()

# datetime 객체를 그대로 삽입
conn.execute("INSERT INTO TEST (ID, DATE) VALUES (?, ?)", ('My date', datetime.date(2018, 1, 4)))
conn.commit()

print("레코드가 정상적으로 삽입되었습니다.")

출력 결과

레코드가 정상적으로 삽입되었습니다.

저장된 날짜 조회하기

데이터베이스에서 값을 다시 가져오면 별도의 변환 작업 없이도 날짜가 이미 datetime.date 객체로 파싱되어 반환됩니다. 아래 예제는 앞에서 저장한 데이터를 SELECT 문으로 조회하는 코드입니다.

import sqlite3
import datetime

conn = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
conn.execute('''CREATE TABLE TEST (ID TEXT PRIMARY KEY NOT NULL, DATE DATE)''')
conn.execute("INSERT INTO TEST (ID, DATE) VALUES (?, ?)", ('My date', datetime.date(2018, 1, 4)))
conn.commit()

cursor = conn.execute("SELECT ID, DATE FROM TEST")
for row in cursor:
    print(row)

출력 결과

('My date', datetime.date(2018, 1, 4))

핵심 포인트 정리

  • detect_types=sqlite3.PARSE_DECLTYPES: 테이블 선언 시 명시한 타입(DATE 등)을 기준으로 값의 자동 변환을 활성화합니다.
  • 삽입: 날짜를 문자열로 바꾸지 않고 datetime.date 또는 datetime.datetime 객체를 그대로 쿼리 파라미터에 바인딩하면 됩니다.
  • 조회: SELECT 결과에서 해당 컬럼은 자동으로 Python의 날짜·시간 객체로 되돌아오므로, 이후 날짜 연산이나 포맷팅을 바로 수행할 수 있습니다.