python의 Enum
사용방법과 개요는 워낙 많은 블로그에서 다루지만, 실제로 어떻게 활용하고 부족한 구조를 어떻게 매꿀지에대해서 이야기하는 곳이 없음...
java 개발 당시에 처음 접했던 enum은 Java Enum 활용법 : 인프런 이동욱님의 글을 통해서였고, 너무나 매력적으로 느껴져서 그 이후로 진행하는 프로젝트에서 자주 바뀌지 않으며며, 행위와 값이 연관 되는 형태, 그룹핑 되어야하는 내용은 여지 없이 enum을 활용했다. 조만간 파이썬에서 enum 을 사용하는 방법과 사례를 간단하게 적어봐야겠다.
적을 내용들 잊지 않기위해 기록
-callable 객체를 활용해서 enum의 분류 값을 행위와 연관시키기
-enum으로 model의 분류형태의 필드 컨트롤하기
-enum metaclass에 대해서 (아직 공부가 필요)
# settings.py
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ko-kr'
# test.html
<h1>Post Archives for {{ year|date:"Y" }}</h1>
<ul>
{% for date in date_list %}
<li style="display: inline;">
<a href="{% url 'blog:post_month_archive' year|date:'Y' date|date:'b' %}">{{ date|date:"F" }}</a></li>
{% endfor %}
</ul>
<br>
예상한 문자열 (LANGUAGE_CODE = 'en-us' )
예상한 문자열 (LANGUAGE_CODE = 'ko-kr' )
Django QuerySet
select_related
:외래키로 인한 정참조 관계 , 또는 1:1 매핑되는 상황에서 join을 통해 한번의 쿼리로 대상을 조회해옴
prefetch_related
:정참조 역참조 모든 관계에서 사용가능 1:N , N:M, N:1, 1:1 본 쿼리 + 추가 쿼리를 별도로 생성해서 조회해옴
select_related & prefetch_related 로 불러온 쿼리는 result_cache에 저장되어 동일한 내용을 불러올 때 쿼리가 발생하지 않는다!
bulk_update(objects, update_fields: list)
: 벌크 업데이트 가능, But QueryManager를 통해 재정의한 save() 메소드의 내용이 적용되지 않는다ㅠㅠ
PostgresSQL json type (매번 까먹음...🥵)
👆json_type(array형태) 컨트롤 방법
-> : json 형태에서 값을 찾을때
->> : json array 형태에서 값을 찾을 때, array 내부를 돌면서 해당 이름을 찾는다.
-- 테이블 생성
CREATE TABLE company (
id INTEGER PRIMARY KEY,
name CHARACTER VARYING NOT NULL,
employees JSONB NOT NULL,
info JSONB NOT NULL
);
-- 데이터 입력
INSERT INTO company VALUES(1, '삼성', '[{"name":"홍길동1", "age": "20"}, {"name":"홍길동2", "age": "21"}, {"name":"홍길동3", "age": "22"}]','{"create": "2020-06-09", "created_by" : '이건희'}');
INSERT INTO company VALUES(2, '카카오', '[{"name":"장동건1", "age": "30"}, {"name":"장동건2", "age": "31"}, {"name":"장동건3", "age": "32"}]','{"create": "2018-08-19", "created_by" : '누구지'}');
INSERT INTO company VALUES(3, '네이버', '[{"name":"스티브1", "age": "40"}, {"name":"스티브2", "age": "41"}, {"name":"스티브3", "age": "42"}]','{"create": "2013-02-12", "created_by" : '스티브 잡스'}');
-- info의 created_by가 '스티브 잡스'인 행을 찾는 쿼리
SELECT * FROM COMPANY WHERE employees -> 'created_by' = '스티브 잡스'
-- employees중에 name이 '홍길동'인 행을 찾는 쿼리
SELECT * FROM COMPANY WHERE employees ->> 'name' = '홍길동'