DB에 CSV 파일 넣기

Jina·2020년 4월 25일
4

Django

목록 보기
10/11

DB / CSV

Django DB에 CSV 파일 넣기

아래의 방법을 이용하여 CSV 파일을 Django의 DB(여기서는 mysql)에 넣을 수 있음

아래의 내용은 장고의 manage.py가 있는 위치에 만들어주기
(파일을 만들고 실행하면 DB에 데이터가 추가됨)

 import csv
 import os
 import django
 import sys

 os.chdir(".")
 print("Current dir=", end=""), print(os.getcwd())

 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 print("BASE_DIR=", end=""), print(BASE_DIR)

 sys.path.append(BASE_DIR)

 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project1.settings")	# 1. 여기서 프로젝트명.settings입력
 django.setup()
 
 # 위의 과정까지가 python manage.py shell을 키는 것과 비슷한 효과

 from car.models import *	# 2. App이름.models

 CSV_PATH = './model.csv'	# 3. csv 파일 경로

 with open(CSV_PATH, newline='') as csvfile:	# 4. newline =''
     data_reader = csv.DictReader(csvfile)

     for row in data_reader:
         print(row)
         Model.objects.create(		# 5. class명.objects.create
             name = row['model']
             # 6
         )

1) "projet1.settings" 부분에 프로젝트명.settings 입력

여기서는 project명이 project1이었기 때문에 위와 같이 입력한 것

2) App이름.models

여기서는 car App의 모델을 이용할 것이기 때문에 위와 같이 입력

3) CSV 파일의 경로 입력
CSV가 담겨있는 폴더가 manage.py가 있는 곳과 같은 경우 위와 같이 입력

4) newline =''
csv는 ,를 기준으로 데이터를 나눔
line을 나누는 기준을 정해주어야함 위의 명령어를 사용하면 ' ' (공백)이 있을 시 새로운 줄로 인식한다는 뜻

5) class명.objects,create

6) name = row['model']

여기서 name은 내 Model class에 입력된 데이터 이름
row['model']은 내 CSV에 입력된 데이터베이스의 이름

예시 )

  • class Model
 class Model(models.Model):
     name         = models.CharField(max_length = 50)

     class Meta:
         db_table = 'models'
  • CSV

위 이미지의 model이라고 써있는 부분을 class Model의 table(models)에 name으로 입력한다는 뜻

주의할 점

Foreign Key를 가지는 데이터는 원본 데이터가 먼저 데이터베이스에 등록되어야함!

Foreign_key 입력

 CSV_PATH = './CSV/modelversionline.csv'

 with open(CSV_PATH, newline='') as csvfile:
     data_reader = csv.DictReader(csvfile)

     for row in data_reader:
         print(row)
         ModelVersionLine.objects.create(
             model = Model.objects.get(id=row['model_id']),
             version = Version.objects.get(id=row['version_id']),
             line = Line.objects.get(id=row['line_id']),
             spec = Spec.objects.get(id=row['spec_id']),
             dimension = Dimension.objects.get(id=row['dimension_id'])
         )

이런식으로 데이터 가져와서 연결하기

Mysql

Django에서 서버 켜기

mysql.server start

장고에서 mysql 서버가 꺼져있을 때 서버는 위와 같은 명령어로 킬 수 있음

DB확인하기

아래의 명령어들을 이용하여 mysql에 있는 데이터들을 확인 할 수 있음

1. mysql -u root -p

위의 명령어로 mysql의 root로 들어갈 수 있음
들어갈 때 설정했던 비밀번호 입력하면 들어가짐

2. show databases;

; 빼지 말고 써야함

위의 명령어를 이용하여 database를 볼 수 있음
나의 경우에는 아래와 같이 나옴

여기서 내가 사용하려 하는 데이터베이스를 열기 위해서 아래의 명령어 이용

3. use DB명

여기서는 DB명이 project_1st임

따라서 아래와 같이 입력함

use project_1st

이 명령어를 입력하면 Database changed 라는 글이 나타남
이 말이 나오면 Database가 바뀐 것

이 Database의 테이블들을 보고싶으면
아래의 명령어 사용하기

4. show tables;

테이블 내의 데이터를 보기 위해서는 아래와 같이 사용

5. select * from table명;

위의 table중 models의 table을 보고 싶으면 아래와 같이 사용하기

select * from models;

위와 같이 사용하면 아래의 사진과 같이 나타남

DB 삭제하기 1

테이블 내용을 삭제하기

truncate table table명;

만약 위의 models 테이블의 데이터를 삭제하고 싶으면 아래와 같이 입력

truncate table models;

만약 삭제하려는 테이블의 데이터를 참조하는 다른 테이블이 있다면 (다른 테이블의 Foreign Key가 삭제하려는 테이블의 데이터인 경우) 데이터가 삭제안됨

그러한 경우 아래의 명령어 이용

set foreign_key_checks = 0;

위의 명령어는 연결되어있는 foreign key를 끄는 방법

위의 명령어로 FK를 껐으면 데이터를 삭제할 수 있음
데이터 삭제는 위의 truncate table table명;을 입력하면 진행됨

set foreign_key_checks = 1;

위의 명령어는 다시 FK 연결하도록 함

DB 삭제하기 2

데이터베이스 자체를 삭제하는 방법

drop database 데이터베이스명;

여기서는 db명이 project_1st이므로

drop database project_1st;

database 만들기

위와 같이 DB자체를 삭제한 경우 DB를 다시 만들어줘야함

create database 데이터베이스이름 character set utf8mb4 collate utf8mb4_general_ci;

DB table 내용보기

desc table명;

모든 내용이 아니라 테이블 row 보는 것

0개의 댓글