inflearn logo
강의

講義

知識共有

Djangoフレームワークを正しく学ぶPart.3

Deprecation warning 질문

747

rhkrcjswo8454

投稿した質問数 2

0

14강중에서요 밑에 파이썬 코드를 치고 실행하면 실행은 됩니다. 그러나

 

The default datetime adapter is deprecated as of Python 3.12; see

the sqlite3 documentation for suggested replacement recipes

cs.execute("INSERT INTO tbl_test(Column1, Column2) VALUES(?,?)",(today, now))

 

c:\DjangoInflearn\myproject\sqlite3_008.py:53: DeprecationWarning: The default date converter is deprecated as of Python 3.12; see the sqlite3 documentation for suggested replacement recipes

row = cs.fetchone()

c:\DjangoInflearn\myproject\sqlite3_008.py:53: DeprecationWarning: The default timestamp converter is deprecated as of Python 3.12; see the sqlite3 documentation for suggested replacement recipes

row = cs.fetchone()

 

이렇게 Deprecation 경고가 나옵니다. sqlite3공식문서를 통해 확인하라고 하지만 영어가 부족하여 찾기가 어렵고 찾아도 맞는지 모르니... 어떻게 입력 해야 하는지 모르겠습니다.

import sqlite3              
import datetime 

# DB 및 커서 객체생성
dbConn = sqlite3.connect(":memory:", detect_types = sqlite3.PARSE_DECLTYPES)
cs = dbConn.cursor()

#테이블 생성
cs.execute("CREATE TABLE IF NOT EXISTS tbl_test(Column1 date, Column2 timestamp)")

# 날짜, 시간 설정(함수써서 변수에 넣고)
today= datetime.date.today()
now = datetime.datetime.now()   

# 데이터입력
cs.execute("INSERT INTO tbl_test(Column1, Column2) VALUES(?,?)",(today, now))

# 데이터 출력1
print('-'*50, '출력1')
strSQL ="SELECT*FROM tbl_test"
cs.execute(strSQL)
row = cs.fetchone()

print('오늘날짜=',row[0], "-->", type(row[0])) # str 타입감지기능 안썼으니까
print('현재시각=',row[1], "-->", type(row[1])) # str 

django

回答 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
정근당근님, 경고 메시지에 나타난 내용은 Python 3.12 버전부터 sqlite3 모듈에서 기본적으로 제공되던 날짜 및 시간 변환기(deprecated default date and timestamp converter)가 더 이상 사용되지 않는다는 의미입니다. 이에 따라 사용자가 직접 변환 함수를 작성하여 사용해야 합니다. 관련 내용은 sqlite3 documentation에서 참고할 수 있습니다.

간단한 해결 방법으로는 sqlite3 모듈의 register_adapterregister_converter 함수를 이용해 커스텀 날짜 및 시간 변환기를 등록하는 방법이 있습니다. 예시 코드는 다음과 같습니다.

import sqlite3
import datetime

# 커스텀 변환기(adapter)와 변환함수(converter)를 등록합니다.
def adapt_date(val):
    return val.isoformat()

def convert_date(s):
    return datetime.date.fromisoformat(s.decode('ascii'))

def adapt_datetime(val):
    return val.isoformat(' ')

def convert_datetime(s):
    return datetime.datetime.fromisoformat(s.decode('ascii'))

# 커스텀 변환기(adapter) 등록
sqlite3.register_adapter(datetime.date, adapt_date)
sqlite3.register_adapter(datetime.datetime, adapt_datetime)

# 커스텀 변환함수(converter) 등록
sqlite3.register_converter("date", convert_date)
sqlite3.register_converter("timestamp", convert_datetime)

# DB 및 커서 객체 생성 및 타입 감지 등록
dbConn = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES)
cs = dbConn.cursor()

# 코드 나머지 부분은 예전과 동일하게 작성합니다.
# ...

위의 코드에서 adapt_date, convert_date, adapt_datetime, convert_datetime 함수들은 Python의 datetime.datedatetime.datetime 타입을 SQLite 데이터베이스가 이해할 수 있는 문자열로 변환하고, 그 반대로 데이터베이스에서 다시 Python의 날짜/시간 타입으로 변환하는 작업을 수행합니다.

이렇게 변환 함수를 등록하면 DeprecationWarning이 나타나지 않게 됩니다. 만약 추가적인 도움이 필요하시다면, 영어 문서의 이해가 어려우실 경우 문서 번역 도구나 커뮤니티의 도움을 받아 번역하여 확인해 보실 수 있습니다.

진도미확인 (진도가 안 넘어감)

0

41

1

자료 화면 문의

0

40

1

(질문)KG이니시스 팝업차단 문제 발생(강의 13. 자바스크립트만으로 포트원 결제 구현하기, 7분18초)

1

163

2

강의에 나왔던 js 파일이 깃허브에 없습니다

1

67

1

RuntimeError: There is no current event loop in thread 'MainThread'

0

84

1

chapter 07-01 실행 오류

0

67

1

DOCKER 설치 관련 질문입니다

0

91

2

Chapter05-04 : sum_func의 합이 이중 출력됩니다.

0

78

2

안녕하세요.

0

48

1

asgi 를 elasticbeanstalk 으로 배포는 어떻게 할수 있을까요?

0

84

1

모바일 디버깅, 반응형 레이아웃 4분48초 질문

0

45

1

AI 도구 학습법 문의

0

85

2

45. 병렬성 2 - Futures(5-1) wait가 의도된 대로 동작하지 않습니다.

0

93

2

멀티스레딩 - 44. 병렬성 1 - Futures(4-2)

0

71

2

chapter05_02 클로저 질문사항 !

0

53

1

ConnectionRefusedError: [WinError 10061]

0

100

2

CSRF_COOKIE_NAME에러

0

80

2

Django의 View나 URL의 네이밍 컨벤션

0

61

1

Dockerfile 질문

0

76

2

decorator 관련질문입니다.

0

51

1

로그인 오류

0

74

2

PRINT_SQL=1 py manage.py shell 에러

0

74

2

08-14 FormView 관련 질문

0

72

1

sqlite3_001.py는 어디서 생성하나?

0

307

1