할수는 있다.
truncate 메소드를 정의해 TRUNCATE TABLE 구문을 실행시키면 된다.
truncate는 테이블을 DROP AND CREATE 한다.
class Category(models.Model):
@classmethod
def truncate(cls):
with connection.cursor() as cursor:
cursor.execute('TRUNCATE TABLE "{0}" CASCADE'.format(cls._meta.db_table))
파이썬에서 내가 겪었던 datetime 고난들
pytz.timezone("Asia/Seoul")
은 +9시간이 아니다
Asia/Seoul의 초기 시차는 UTC+8:28으로 tz database에 기록되어 있다.
pytz는 이 데이터베이스를 기반으로 시차를 적용하는데, datetime.replace()나 datetime.astimezone()을 호출 할 때 가장 오래된 기록을 기준으로 변환을 시도한다. (왜 그러는 걸 까 ..)
따라서 올바른 시간을 얻으려면 아래 방법을 이용해야 한다.
KST = pytz.timezone("Asia/Seoul")
KST.localize(datetime.now())
now = timezone.localtime()
django orm에서는 order_by 구문이 없으면 알아서 ORDER BY NULL
구문을 추가해준다.
ORDER BY NULL을 왜 넣어주지? 🤔
mysql은 GROUP BY 를 하면 기본적으로 정렬도 함께 수행한다.
아래 사진의 Using filesort
인덱스가 걸려있는 컬럼으로 group by 할 때는 성능에 큰 문제가 되지 않는다.
다만, 인덱스가 없는 컬럼으로 group by 할 경우에는 정렬할 필요가 없어도 정렬을 수행한다.
1) 쿼리 결과를 정렬할 필요가 없고
2) 인덱스가 없는 컬럼으로 group by 를 할때는
ORDER BY NULL
을 추가해주는 것이 성능에 도움을 준다.