1차 프로젝트: 데이터베이스 작성

signet·2021년 2월 17일
0

프로젝트를 시작하며 가장 먼저 한 일은 클론할 사이트의 기능을 분류하고, 어느 선 까지 구현할 지 프론트와 합의하는 일 이었다. 그 이후는 데이터베이스를 작성하고 데이터를 넣는 작업이었는데, 이 과정에서 배운 내용을 작성하고자 한다.

다대다 관계를 정의할 때, django에서는 ManytoManyField를 선언하고, 중간 테이블을 생성한 뒤 through='중간테이블 이름'으로 이어주는 것이 보편적이다. 중간 테이블의 경우, 반드시 models.py에 작성하지 않아도 되긴 하지만, 데이터를 참조할 때 막히는 경우가 생기기 때문에 중간 테이블을 작성하는 것이 보편적이다. 이때, 서로 다른 테이블 간의 다대다 관계는 위의 방법으로 가능하지만, 같은 테이블의 데이터들끼리 다대다 관계로 참조를 하게 되는 경우, 테이블을 따로 작성하여 똑같은 테이블의 id를 참조하도록 하긴 하지만, 이 경우 역참조를 할 때 정확히 어떤 컬럼을 참조하는지 알 수 없기 때문에 문제가 되며, migration도 되지 않는다.
이때 필요한 것이 related name이다. 이것은 외래키를 역참조해서 불러올 때, 테이블 이름이 아니라 어떤 이름으로 불러올 지 지정해주는 것이다. 즉, 같은 테이블의 데이터들끼리 다대다로 참조하는 경우, 기준이 되는 데이터의 id를 받는 컬럼의 이름과 역참조할 데이터의 id를 받는 컬럼의 이름을 다르게 지정해준다면, 불러올 때 혼동이 없이 원하는 데이터를 역참조해서 불러올 수 있다.
꼭 같은 테이블의 데이터끼리가 아니더라도, 똑같은 테이블의 데이터 id를 참조하는 한 테이블의 여러 외래키에도 이를 적용하여 구분을 해 줄 수 있다.

2. SQL문으로 데이터 삽입

데이터를 django로 일일히 넣어주는 것은 데이터의 양이 많을 경우 많은 시간이 걸린다. 이때, 엑셀 csv파일과 init.sql파일 작성, sql문으로 데이터를 일괄적으로 넣어줄 수 있다.
데이터베이스 테이블에 존재하는 컬럼 명을 엑셀 시트 1행에 넣어주고, 그에 따라 데이터를 쭉 넣어준다. 그리고

="insert into 테이블 (id, 컬럼명) values (0, "&B2&", '"&C2&"', '"&D2&"', '"&E2&"', '"&F2&"',"&G2&", "&H2&","&I2&","&J2&","&K2&","&L2&","&M2&","&N2&","&O2&");"

로 쭉 작성한다. 그리고 이것을 init.sql 파일에 복사한 후, 마지막에 commit을 써준다. 그리고mysql에 데이터베이스를 선택한 후

source ~/init.sql

을 입력하면, 데이터베이스에 데이터가 들어간다.

0개의 댓글