본문 바로가기

[SQLALchemy, python,MySQL] date, time, DateTime 자료형 입력하고 불러오기(타임존 적용까지)

ironwhale 2022. 7. 17.

SQL알케미와 MySQL로 날짜, 시간 입력하기

SQL알케미로 MySQL에 날짜, 시간을 입력하는 법을 알아보겠습니다.  그리고 날짜를 불러올때 timezone이 aware 가 아닌 naive로 받아오는거 같습니다. 그래서 relpace를 사용해서 타임존(timezone)을 적용해보도록 하겠습니다. 

 

저는 보통 MYSQL로 직접 날짜나 시간을 저장할때는 TimeStamp 컬럼에 now() 함수를 사용하여 시간과 날짜를 입력하는데요 이번에는 SQLALchemy를 이용하여 해보도록 하겠습니다. 


테이블 클래스 정의

class Time(Base):
    __tablename__ = "time_tbl"
    
    id = Column(Integer,primary_key=True, index=True)
    date_time = Column(DateTime(timezone=True))
    stamp_time = Column(mysql.TIMESTAMP)
    date1 = Column(Date)
    time1 = Column(mysql.TIME)
    date_time2 = Column(mysql.DATETIME(timezone=True))
  • timezone에 True를 해야 DB에 저장될때 timezone까지 저장 되는거 같아 일단 True로 했습니다만 나중에 불러올때는 타임존까지 불러오는건 아닌거 같습니다. 그래서 replace를 통해 타임존을 따로 적용해보도록 하겠습니다. 혹시나 다른 방법을 알고 계시면 알려주시면 감사하겠습니다. 

날짜, 시간 입력하기 

from sqlalchemy.sql import func

time_db = Time(
	date_time=func.now(),
	stamp_time=func.now(),
	date1="2022-7-16",
	time1='23:20:59',
	date_time2="1998-12-31 23:59:59")

db.add(time_db)
db.commit()
db.refresh(time_db)
  • func.now() 를 이용해서 UTC 시간으로 입력
  • date 타입 입력 date = “2022-7-16”
  • time 타입 입력 time1='23:20:59' 초까지 입력할것을 추천
  • datetime 타입 입력 date_time2="1998-12-31 23:59:59"

날짜 시간 불러오기- replace로 타임존 주입

from sqlalchemy import select

stmt = select(Time)
results = db.execute(stmt).scalars().all()

for result in results:
    date_time = result.date_time.replace(tzinfo=datetime.timezone.utc)
    date_time2 = result.date_time2.replace(tzinfo=datetime.timezone.utc)
    stamp_time = result.stamp_time.replace(tzinfo=datetime.timezone.utc)
    
    print(date_time.astimezone(),'||',stamp_time.astimezone(),'||',date_time2.astimezone())
    
# 
# 출력결과
# 2022-07-17 08:57:54+09:00 || 2022-07-17 08:57:54+09:00 || 1999-01-01 08:59:59+09:00
  • result.date_time.replace(tzinfo=datetime.timezone.utc) 로 타임존 주입 후 
  •  .astimezone() 을 하면 현재 한국 시간으로 바뀜

댓글