데이터베이스를 공부하는 방법 중에 하나는, 잘 구현된 라이브러리를 보고 어떤 구조로 데이터베이스를 설계했는지 보는 것이라고 생각합니다. 장고에서, 카데고리를 추가해야 할 일이 있었는데요. 저는 항상 하던 것과 같이 self Foreign key와 name만을 필드로 가지는 모델을 정의했습니다. 그런데, 찾다보니 mptt라는 것이 있었는데요. 간단하게 소개해 드리겠습니다. 먼저 계층형 쿼리에 대한 것부터 알아야 하는데요. 흔히 댓글, 대댓글이라던지 1차, 2차, 3차 카데고리와 같은 것들이 계층형 구조라고 할 수 있어요. 여기서 질문을 하나 던져볼게요. 대분류가 Game에 속하는 글은 어떤 것인가? 예를 들자면, 저는 btd5에 대해 썼는데요. btd5의 대분류 역시 Game입니다. 그러면 btd5는 Ga..
코딩 검색 결과
파이썬에서 왈러스 연산자는 3.8부터 등장한 기능입니다. 한 마디로 요약하면 대입과 평가를 한번에 할 수 있다는 것입니다. 문서에 나온 예제들이 그리 어렵지 않으니 한 번 쯤 훑어보셔도 괜찮을 듯 싶습니다. 저는 간단하게만 정리하겠습니다. t에 3을 대입한 다음에 이게 0과 같은지 비교해서, 같으면 1을 출력하고 싶습니다. 이런 류의 연산이 생각보다 많이 일어나는데요. 2번째 줄과 같이 if (t = 3) != 0: 이런 식으로 쓸 수도 있다고 생각할 수 있습니다. 사실 저는 그렇게 생각했습니다. 그런데 결과를 보면 invalid syntax라고 뜨네요. 이럴 때 쓸 수 있는 게 왈러스 연산자입니다. 2번째 줄에 보면 (t := 3)이 있습니다. 이것은 변수 t에 3을 대입합니다. 다음에, (t := 3..
장고에서 many to many field를 써야 할 때가 종종 있습니다. 예를 들자면, 게시물 하나에 태그를 구현하는 것, 친구 관계 등이 있습니다. 이 글에서는 many to many field를 다룰려는 것은 아니고, 다대다 관계에서 어떤 식으로 테이블을 생성하는지만 간단하게 알아보겠습니다. 게시물 테이블이 있다고 해 보겠습니다. 보통 한 게시물의 작성자는 하나이므로, 게시물 테이블은 이런 식으로 설계해도 크게 문제는 없습니다. 1, 2, 3은 글을 쓴 작성자의 유저 id를 의미합니다. fk로, 유저의 id를 참조합니다. board에서 user 테이블을 참조하는 외래키 정도라고 생각하시면 편하겠습니다. 2번 유저의 이름을 GA에서 ga로 바꾸었을 때, 2번 게시물의 작성자가 ga라는 것을 알 수 있..
os에는 listdir, scandir, walk가 있습니다. 이 중 os.walk는 무엇을 하는 함수일까요? 먼저 제가 탐색할 폴더를 '.'라고 해 보겠습니다. 이 폴더 아래에는 폴더 a, 파일 b, c가 있고, 폴더 a 밑에는 파일 a, b가 있습니다. 이 때, listdir과 scandir은 아래 회색친 부분만 탐색합니다. 1뎁스만 탐색하는 것을 볼 수 있어요. 이에 비해, walk는 . 아래에 있는 모든 파일과 폴더들을 탐색합니다. 단, 아무런 설정을 하지 않으면, 바로가기와 같은 것들은 제외하고 탐색하긴 합니다. 제가 탐색할 폴더 . 밑에 그러한 것이 없다고 가정하면, 회색 부분이 walk가 탐색하는 범위가 됩니다. 그러니, 언제 써야 할 지는 쉽게 알 수 있습니다. 어떤 폴더를 기준으로 재귀적..
이전 글에서 파이썬의 os.listdir을 소개한 적이 있을 겁니다. 다시 복습해 봅시다. 먼저 이 코드는, main.py가 있는 폴더에 있는 파일과 폴더들을 모두 가져옵니다. 단 자신과 상위 폴더는 제외합니다. 해당 폴더에 들어가서 ls -a를 쳐 봅시다. 그러면 이 폴더에 속한 디렉토리와 파일들이 나옵니다. .과 ..을 제외한 갯수를 세면 7개입니다. 프로그램의 실행 결과를 볼까요? 6개로 동일하게 나옵니다. 여기서 문제. 이 리스트에 있는 친구들이 파일인지 폴더인지 알아낼 수 있는 방법이 있을까요? 그렇지 않습니다. 단지, 리스트에 있는 아이템만 보고 알 길이 없습니다. 그렇기 때문에, 따로 아래와 같은 처리를 해 주어야 합니다. os.path.isdir로 따로 처리를 했음을 알 수 있습니다. 이는..
최근댓글