[장고 거북이반] 220102 #3

2022. 10. 5. 16:40스파르타코딩클럽[AI트랙 3기]/장고 거북이반

3주차

1)클래스와 인스턴스를 이용한 데이터 저장

클래스와 인스턴스 활용해서 데이터를 효과적으로 저장하고 관리할 수 있을지 보자.

class Review:

title = ‘’

content = ‘’

user= ‘’

 

def __inint__(self, content=content, title=title, user=user): #앞에 것이 킷값, 뒤에 것이 값이 들어오는 변수

self.content = content #앞에 contentclasscontent, 뒤의 contentinit안의 키값 self.title = title

self.user = user

 

review1 = Review(title=“인생영화입니다”, content=“어쩌구저쩌구”, user=“정진엽”)

하면 킷값별로 내용이 들어감(순서를 바꿔줘도 킷값을 줬기 때문에 문제 없음. 이렇게하면 입력한대로 인스턴스가 생성되고 생성된 인스턴스는 review1이라는 변수에 입력됨.

문제점: 파일을 실행할때만 존재한다는 것이 문제. 끄면 날아감. 데이터를 유지하기 위해 다른 곳에 보관을 해야하는데 그것이 바로 디비.

 

2)db

-데이터베이스, dbms는 데이터베이스를 관리. 엑셀의 스프레드시트라고 생각하면 됨.

-sql은 데비 엑세스 및 조작을 위한 표준 언어

-sqlite3 가 깔려있음

sqlite3 test 하면 뭔가 나오고 crtl+v해서 실행하면 현재 테이블이 만들어진 것.

-디비안에 값을 넣어주기 : INSERT INTO Person

VALUES(1,‘이혜리’,‘1994-06-09’):

-디비 저장된 데이터 불러오기 :SELECT * FROM Person #Person안의 데이터를 가져온다.

엔터 치고 ‘;’까지해야 끝난다는 것을 알려줌. 그러면 입력한 데이터가 나옴.

-스키마 : 엑셀의 열에 해당하는 부분, 어떤 구조를 결정하는 것. 아래 참조.

CREATE TABLE “Person” (

“ID” INTEGER NOT NULL.

“NAME” TEXT NOT NULL.

“Birthday” TEXT,

PRIMARY KEY(“ID” AUTOINCREMENT)

):

필드 : ID하나 NAME하나 BIRTHDAY하나 이런 것들을 필드, ID,NAME,BIRTDAY에 입력되는 각각의 값들은 레코드라고 함.

우리는 이렇게 안해주고 ORM으로 간편하게 해줌.

 

3)ORM

classdb저장하는 것은 구조가 비슷. 그래서 orm이라는 것을 만들어줬음. object relational mapping. >인스턴스의 속성이 필드로 가는 식으로 이해하면 됨. 복잡한 sql구문 입력 없이 파이선안에서 간편하게 db조작가능케함.

모델에서 가공된 데이터를 컨트롤러에 의해서 view에서 합쳐진 디자인패턴을 견고하게 다지는데 유리함. 데이터의 형태가 모델을 디비에서 가져와서 view(장고에서 컨트롤러)에서는 모델을 불러와서 데이터들을 템플릿츠에서 보게하는 디자인패턴을 견고화 해주는데 좋음. 단점은 orm만으로 구현하는것이어려울 수도있고, 복잡할수록 설계난이도가 올라감. orm이 알아서하려면 장고에서 설계를 해줘야함. 미리 모델에서 정의해줘야함.

>>>객체지향프로그래밍에서는 디비를 편리하게 관리하기 위해 orm 프레임워크가 도입됐음.

 

4)migration

sqlite viewr 익스텐션 설치

누르면 디비 내 테이블을 확인할 수 있음.

aricles>models.py

class Article(models.Model) #상속. class를 상속받는다는 의미, models가 갖고있는 Model이라는 클래스가 존재. 이 안에서 정의된 기본적인 것들을 동일한 속성을 가진 모델들을 만들어냄. pkid는 자동으로 만들어짐

title = models.CharField(max_lnegth=10)

content= models.Textfield()

created_at = models.DateTimeField(auto_now_add=True)

모델스에서 만든것들을 데이터베이스 테이블에 추가해주려면 migration을 한다. 그러면 init이라는파일생기고 안에 내용이 다들어감. 마이그레이트해주면 장고 디폴트된 테이블 포함해서 내가 만든 테이블 입력됨.

 

5)마이그레이션 확인

python manage.py sqlmigrate articles 0001

하면 create model article 하면서 다양한 정보가 나옴.

 

6)장고의 모델 필드

필드 : 모델에서 가장 중요한 것으로 어떤 타입을 사용할지를 입력해줌. 들어갈 값이 어떤 필드일지 나옴. 필드 옵션도 모델 문서가 아닌 모델필드로 가면 모든 종류의 모델필드를 볼 수 있음. char,text,datetime등의 필드를 자주 씀.

cahrfield쓰는이유 : text필드는 차지하는 용량이 많아짐.

 

7)admin으로 crud

superuser만들기

하고 adminarticles라는 앱이 등록이 안돼있음. 그래서 admin.py에 들어가서 from.models import Article을 불로옴

admin.site.register(Articles)를 등록해줌. admin페이지에서 생성, 수정, 삭제 가능 ? sqlite에서 확인 가능.